Security AzMan嵌套角色在角色中找不到用户

Security AzMan嵌套角色在角色中找不到用户,security,asp.net-membership,nested,azman,Security,Asp.net Membership,Nested,Azman,我将AzMan(1.0)用于ASP.NETWeb应用程序,我对嵌套角色有一个疑问 假设我有以下角色: MyApp MyAppUser 米帕德明 MyAppSupport 大多数情况下,所有用户(MyApp)都可以访问该应用程序,但某些功能将特定于其他角色 我想声明性地限制MyApp角色的成员访问网页 [PrincipalPermission(SecurityAction.Demand, Role = "MyApp")] 我将检查User.IsInRole或使用AzMan API检查代码中的操作

我将AzMan(1.0)用于ASP.NETWeb应用程序,我对嵌套角色有一个疑问

假设我有以下角色: MyApp MyAppUser 米帕德明 MyAppSupport

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

我想声明性地限制MyApp角色的成员访问网页

[PrincipalPermission(SecurityAction.Demand, Role = "MyApp")]
我将检查User.IsInRole或使用AzMan API检查代码中的操作权限

用户被分配到较低级别的角色(用户、管理员、支持),这些角色被添加到MyApp角色中


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

听起来您希望在调用
IsInRole()
时支持复合角色定义(其中角色定义被定义为包含其他角色定义)。我认为,如果您使用组继承和角色分配,您会得到想要的结果

换句话说,与其依靠
IsInRole
来遵循“MyApp”的角色定义来确定角色定义“MyAppAdmin”是该定义的一部分,不如改为使用组创建继承,然后使用角色分配将一个或多个组分配给您的角色定义。您可以创建一个“Administrators”组,该组可能是“Everyone”组的成员

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

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

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