2010-09-02 79 views
2

我正在使用AzMan(1.0)为一个ASP.Net Web应用程序,并且我有一个关于嵌套角色的问题。AzMan嵌套角色找不到用户角色

说我有以下作用: MyApp的 MyAppUser MyAppAdmin MyAppSupport

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

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

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

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

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

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

回答

1

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

换句话说,不是依靠IsInRole来跟随“MyApp”的角色定义来确定角色定义“MyAppAdmin”是该定义的一部分,而是使用Groups来创建继承,然后分配一个或多个使用角色分配将组分配到您的角色定义。您可以创建一个“管理员”组,该组可能是“每个人”组的成员。

我真的认为你的角色名称真的是更好的组名。角色表示某些功能,而不是根据用户权限对用户进行分类。这是一个团队的目标。

例如,假设大多数用户(不是管理员或支持人员)对您的应用具有只读权限。我倾向于将该角色称为“查看器”,并将其分配给允许该角色的用户仅查看,不编辑任何数据的任务或操作。我会把每个人都分配给这个角色(不管我只用一组还是几组并不重要)。 “支持”角色允许分配给它的用户执行某些操作(或任务分组操作)。只有一些人会被分配到这个角色(再次,也许他们是单独分配的,或者我有一个名为“客户支持代表”的组 - 无所谓)。

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