AzMan嵌套角色未找到角色中的用户

时间:2010-09-02 18:35:26

标签: security asp.net-membership nested azman

我正在使用AzMan(1.0)作为ASP.Net网络应用程序,我对嵌套角色有疑问。

说我有以下角色: MyApp的 MyAppUser MyAppAdmin MyAppSupport

在大多数情况下,所有用户(MyApp)都可以访问该应用程序,但某些功能将特定于其他角色。

我想以声明方式将对网页的访问权限限制为MyApp角色的成员。

[PrincipalPermission(SecurityAction.Demand, Role = "MyApp")]

我将检查User.IsInRole或使用AzMan API检查我的代码中的操作权限。

将用户分配给较低级别​​的角色(用户,管理员,支持),并将这些角色添加到MyApp角色。

问题在于,当我检查用户是否是MyApp角色的成员时,他们不是,即使他们所在的角色属于MyApp角色。检查这个的唯一方法是递归地完成所有角色吗?这意味着我无法使用声明性安全性,或者这样做我必须将所有用户添加到顶级组(不理想)。

1 个答案:

答案 0 :(得分:1)

听起来你期望在IsInRole()的调用中支持复合角色定义(其中角色定义被定义为包括其他角色定义)。如果你使用Group继承和Role Assignment,我想你会得到你想要的结果。

换句话说,不是依赖于IsInRole来遵循“MyApp”的角色定义来确定角色定义“MyAppAdmin”是该定义的一部分,而是使用Groups创建继承,然后分配使用角色分配将一个或多个组添加到角色定义中。您可以创建一个“管理员”组,该组可能是“Everyone”组的成员。

我真的认为你的角色名称确实是更好的组名。角色表示某些功能,而不是基于用户权限的用户分类。这就是一个团队的目标。

例如,假设大多数用户(不是管理员或支持者)对您的应用具有只读访问权限。我倾向于将该角色称为“查看者”,并为其分配任务或操作,使该角色的用户只能查看而不是编辑任何数据。我会指派每个人去担任这个角色(无论我只用一组还是几组都不重要)。 “支持”角色允许分配给它的用户执行某些操作(或任务分组操作)。只有一些人会被分配到该角色(同样,他们可能被单独分配,或者我有一个名为“客户支持代表”的组 - 无关紧要)。

在我的应用中,我可以检查IsInRole("Viewer"),并且每个用户都将担任该角色。但是,如果我检查IsInRole("Support"),则只有分配给该角色的“客户支持代表”组中的人员才会返回True。