从我从本文中读到的内容中, 我了解到基于角色的访问控制系统是一种用户可以分配给角色的角色,其中角色指定对对象执行操作的权限但是在 asp.net 中,我们没有指定“对对象的操作”,我的意思是我们如何指定“角色 R 中的所有用户都可以对对象 O 执行删除”ASP.Net 中的对象部分在哪里
4 回答
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”。然后,您的代码将如下所示:
if ( !Roles.IsUserInRole("CanDeleteOs") )
throw new Exception("User does not have permission to delete O's.");