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

时间:2011-04-26 15:14:51

标签: asp.net asp.net-mvc rbac role-based

我从this paper读到的内容 我理解基于角色的访问控制系统可以将用户分配给角色,其中角色指定对对象执行操作的权限 但是在asp.net中我们没有指定“对象操作”,我的意思是我们如何指定“角色R中的所有用户都可以对对象O执行删除” ASP.Net中的对象部件在哪里

4 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

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