2011-04-26 103 views
1

从我从this paper 阅读我明白,一个基于角色的访问控制系统是一个用户可以被分配到的角色,其中角色指定的权限来执行的对象 的操作,但在asp.net中,我们不指定“上的操作对象”,我的意思是在这里,我们怎么可以指定‘在角色r的所有用户都可以对对象O’ 哪里是在ASP.Net基于ASP.NET角色的安全性是一个真正的基于角色的访问控制系统吗?

的对象部分

回答

4

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

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

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

这使我们对您的问题:是建立在ASP.Net成员提供了一个真正的基于角色的访问控制系统?不可以。它允许您定义角色,而不是操作。

+0

+1为azman。我们使用了几年,非常方便。我们遇到的唯一问题是AzMan专门打开了一个xml存储。但是最新版本支持SQL Server作为一个非常棒的存储选项。 (由于多种原因,我们无法使用ADAM。) – Dmitry 2011-04-26 15:35:26

+0

您的回答有一些很好的建议,但是当您说ASP.Net基于角色的安全性是RBAC系统时,我不同意。它不支持为您的应用定义操作或将角色映射到角色。它只允许您分配角色并测试角色成员资格。剩下的交给开发人员去创建。 – 2011-04-26 15:48:24

+0

@布莱恩卡森:你是对的。我更仔细地了解了RBAC的真正定义,并相应地更新了我的答案。 – NotMe 2011-04-26 16:22:38

-1

要实现删除操作的删除,所以它由您来检查登录的用户是否有权删除该对象。例如,您可以创建一个角色“CanDeleteOs”。然后,您的代码将如下所示:

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

角色不是权限/操作,不应该这样使用。 – 2011-12-04 23:18:24

+0

那是什么?如果不是作为许可,应该如何使用角色?什么应该用来代替许可? – 2011-12-05 16:06:51

+1

在这种情况下,角色与组(如果您认为用户和组)相似。权限是.NET安全性(认证和授权)中未包含的一个附加细节级别。真正的RBAC框架明确区分用户,角色和操作/权限。你可以使用像AzMan,visual-guard,asp.net权限管理器或者自己推出的东西。 – 2011-12-05 19:29:55

0

退房犀牛的安全,如果你需要的东西更细粒度的。

0

如以前发布建议,以达到更精细,你就需要建立在现有ASP.net成员资格和角色提供。还有如http://www.visualaccesscontrol.com第三方控件提供了基于模块的访问安全和数据访问安全性以及作用。借助Visual Access控件,您可以将管理功能添加到您的ASP.net Web应用程序,以动态地限制用户访问允许执行的活动以及允许他们根据各自角色查看的数据子集。