ASP.NET 基于角色的安全性是真正基于角色的访问控制系统吗?

Is ASP.NET role based security a true role based access control system?

从我从这篇论文中读到的
我知道基于角色的访问控制系统是一种可以将用户分配给角色的角色,其中角色指定对对象执行操作的权限
但是在asp.net中我们没有指定"对象操作",我在这里的意思是我们如何指定"角色R中的所有用户都可以对对象O执行删除操作"
ASP.Net

中的对象部分在哪里


asp.net 的安全模型非常有限。本质上,您只能在角色级别进行控制。这意味着对于任何操作,您都必须测试以查看用户是否是您希望允许执行该操作的任何角色。

我们采用了定义我们自己的模型的方法,该模型提供了更多的粒度。基本上我们定义操作并将这些操作分配给各种角色。通过这种方式,我们可以测试他们是否拥有"删除帐户"权限,而不是测试他们是否处于"管理员"、"帐户管理员"或任意数量的其他角色。它与 Active Directory 的工作方式非常相似。此外,它还允许我们根据需要重新配置角色。

Windows 附带了一个名为 Authorization Manager (AzMan) 的组件。它可以与您的会员提供商合作以提供操作级别控制。有些人在这方面取得了成功,但其他人则抱怨很难开始工作。大约 5 年前,我们在一个项目中使用它,当时它的工作时间约为 95%。另外 5% 与我们的 AD 控制器存在通信问题。

这让我们想到了您的问题:内置的 ASP.Net 成员资格提供商是否是真正基于角色的访问控制系统?不。它允许您定义角色,而不是操作。


正如在之前的帖子中所建议的,要获得更多的粒度,您需要在现有的 ASP.net 成员资格和角色提供者的基础上进行构建。有第三方控件,例如 http://www.visualaccesscontrol.com,它们也提供基于角色的模块访问安全和数据访问安全。使用可视化访问控制,您可以向 ASP.net Web 应用程序添加管理功能,以动态地限制用户只能执行允许他们执行的活动以及允许他们根据各自的角色查看的数据子集。


如果您需要更细粒度的东西,请查看 Rhino 安全性。


您正在执行删除操作,因此您需要检查登录用户是否具有删除对象的权限。例如,您可以创建角色 "CanDeleteOs"。然后,您的代码将如下所示:

1
2
if ( !Roles.IsUserInRole("CanDeleteOs") )
    throw new Exception("User does not have permission to delete O's.");