2

我正在将 AzMan (1.0) 用于 ASP.Net Web 应用程序,并且我对嵌套角色有疑问。

假设我有以下角色: MyApp MyAppUser MyAppAdmin MyAppSupport

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

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

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

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

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

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

4

1 回答 1

1

听起来您期望在对IsInRole(). 我认为如果您改用组继承和角色分配,您会得到您想要的结果。

换句话说,与其依赖于IsInRole遵循“MyApp”的角色定义来确定角色定义“MyAppAdmin”是该定义的一部分,不如使用组创建继承,然后将一个或多个组分配给您的角色定义使用角色分配。您可以创建一个“管理员”组,它可能是“所有人”组的成员。

我真的认为您的角色名称确实是更好的组名。角色表示某些能力,而不是基于用户权限的用户分类。这就是组的用途。

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

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

于 2011-02-21T07:13:07.617 回答