在ASP.NET中,可使用什么来管理角色和分配给角色的权限? - c#

我正在使用ASP.NET Web应用程序。我有一个众所周知的问题:每个用户可以属于一个或多个角色(管理员,公共用户),每个角色可以具有一个或多个权限(可以编辑,可以删除,可以上载等),反之亦然。我想做这样的事情:[http://demo.sitefinity.com/Sitefinity/Admin/Modules.aspx?route=GenericControlPanel.PermissionsView`1]。

我发现这些选项可以实现此目的:

使用NetSqlAzMan(但是我不确定它是否可以与我们的应用程序一起使用,因为我们的用户与应用程序不在同一个数据库中,并且我们使用的是表单身份验证)
实现自己的使我能够执行的类:User.HasPermission / AddPermissionToUser /等。
使用2个角色提供程序:一个由于已知角色和权限之间的m:n关系而知道这些提供程序将被“链接”,因此一个用于管理角色,一个用于管理权限。
我现在使用的是自定义角色提供程序,因此另一种选择是添加方法来管理对此提供程序的权限。

我还想缓存给定用户的角色和权限。我认为我自己需要一些时间,所以您对我有什么建议?

先感谢您

参考方案

如果您找到了针对权限模块的好的打包解决方案,那么我想看看:)

通常,内置安全提供程序在“标识”和“授权”部分之后停止。一旦被标识并被授权访问该应用程序,您就可以自行编码和管理更具体的页面或功能级别权限。

您描述的权限级别实际上是一个相当高级的实现。它在Windows中镜像访问控制列表(ACL)。尽管看起来很简单,但实际上很难编写代码。一旦进行了设计,就会发现您必须实现“拒绝”替代权限,必须处理多级组权限合并,然后必须处理“特殊”权限等。然后,您遇到类似“编辑权限是否也隐含视图,并且如果他们没有视图却有添加”该怎么办?

真是一团糟。

在您以这种复杂性级别实施权限之前,强烈建议您退后一步,看看您是否可以稍微简化权限和角色/组模型。您不仅可以让角色获得许可吗?例如,可以编辑的角色,可以添加的角色,可以查看...的角色等。

在大多数应用程序中,您实际上并不需要权限系统中的完整ACL(例如粒度)。

一旦定义了应用程序真正需要的适当权限级别,通常最好滚动一组自定义对象来管理这些权限。我不得不说,我从来没有考虑过使用第二个链接角色提供程序作为权限管理器……实际上,这是一个好主意。但我还是建议不要这样做。角色提供程序不是为您要尝试的操作而设计的,您可能必须扩展和覆盖默认行为,以至于仅使用一个自定义实现就将更加简单和可维护。

在ASP.NET MVC中创建数据库回调的最有效方法 - c#

我有一个ASP.NET MVC网页,该网页基本上通过日期过滤器显示MS SQL数据库中表的行。当新行插入数据库表时,我想用新行列表更新网页视图。实现此目标的最有效方法是什么?基本上,我想从我的JavaScript创建一个到数据库服务器的回调,以用新结果更新UI。假设数据库表中的行数很大。(〜1百万)谢谢,cas 参考方案 如果数据库更新非常频繁,则可以按特定…

在ASP.NET WebForms中在服务器端初始化bootsrap datatimepicker - javascript

我有这个HTML<div class='datepicker input-group date' id='datetimepickerStart'> <input type='text' class="form-control" /> <span c…

在ASP.NET C#中使用Regex进行Imgur ID匹配 - c#

对于正则表达式,我经验不足,想知道是否有人可以帮助我实现以下目标。我需要一个正则表达式,它将验证某个URL是否为有效的imgur图像并返回图像的ID。 Match imgurMatch = imgurRegex.Match(URL); if(imgurMatch.Success) id = imgurMatch.Groups[0].Value 这里有些例子:…

在ASP.NET Core中,在控制器执行OnActionExecuting之前执行全局过滤器 - c#

在ASP.NET Core 2.0应用程序中,我试图在执行Controller的变体之前执行全局过滤器的OnActionExecuting。预期的行为是,我可以在全局之前准备一些东西,然后将结果值传递给控制器​​。但是,当前的行为是执行顺序被设计颠倒了。文档告诉我有关default order of execution的信息: 从Controller基类继承…

在ASP.NET Core 2.1中添加自定义TagHelpers - c#

我严格按照ASP.NET Core文档进行操作,并花费了大量时间来拖曳堆栈溢出,试图实现简单的自定义TagHelper,但没有成功。任何人都可以就任何陷阱或已知错误提出建议吗?应用程序属性:AssemblyName: AmpWeb Target Framework .NET Core 2.1 NuGet软件包Microsoft.AspNetCore.All …