我正在使用AzMan(1.0)作为ASP.Net网络应用程序,我对嵌套角色有疑问。
说我有以下角色: MyApp的 MyAppUser MyAppAdmin MyAppSupport
在大多数情况下,所有用户(MyApp)都可以访问该应用程序,但某些功能将特定于其他角色。
我想以声明方式将对网页的访问权限限制为MyApp角色的成员。
[PrincipalPermission(SecurityAction.Demand, Role = "MyApp")]
我将检查User.IsInRole或使用AzMan API检查我的代码中的操作权限。
将用户分配给较低级别的角色(用户,管理员,支持),并将这些角色添加到MyApp角色。
问题在于,当我检查用户是否是MyApp角色的成员时,他们不是,即使他们所在的角色属于MyApp角色。检查这个的唯一方法是递归地完成所有角色吗?这意味着我无法使用声明性安全性,或者这样做我必须将所有用户添加到顶级组(不理想)。
答案 0 :(得分:1)
听起来你期望在IsInRole()
的调用中支持复合角色定义(其中角色定义被定义为包括其他角色定义)。如果你使用Group继承和Role Assignment,我想你会得到你想要的结果。
换句话说,不是依赖于IsInRole
来遵循“MyApp”的角色定义来确定角色定义“MyAppAdmin”是该定义的一部分,而是使用Groups创建继承,然后分配使用角色分配将一个或多个组添加到角色定义中。您可以创建一个“管理员”组,该组可能是“Everyone”组的成员。
我真的认为你的角色名称确实是更好的组名。角色表示某些功能,而不是基于用户权限的用户分类。这就是一个团队的目标。
例如,假设大多数用户(不是管理员或支持者)对您的应用具有只读访问权限。我倾向于将该角色称为“查看者”,并为其分配任务或操作,使该角色的用户只能查看而不是编辑任何数据。我会指派每个人去担任这个角色(无论我只用一组还是几组都不重要)。 “支持”角色允许分配给它的用户执行某些操作(或任务分组操作)。只有一些人会被分配到该角色(同样,他们可能被单独分配,或者我有一个名为“客户支持代表”的组 - 无关紧要)。
在我的应用中,我可以检查IsInRole("Viewer")
,并且每个用户都将担任该角色。但是,如果我检查IsInRole("Support")
,则只有分配给该角色的“客户支持代表”组中的人员才会返回True。