我目前通过获取httpcontext的IPrincipal并调用User.IsInRole(nameOfRoleGoesHere);来查询用户是否在角色中.
我正在寻找的行为是让我能够询问用户是否处于角色“管理员”,然后隐含地询问用户是否处于以下所有角色(在这种情况下,角色“正常”将低于“管理员”).
由于我的角色主要是垂直的(如果这有任何意义),这种角色继承似乎对我的应用程序有意义.
我怎么能得到这种行为 – 我必须实现一些自定义逻辑,允许我要求角色“管理员”,但抽象实际上在幕后的活动目录中要求“正常”和“管理员” – 或者是否可以活动目录中的结构组以某种方式自动给我这个行为?
对于我对asp.net,活动目录和.net安全的任何严重误解表示歉意 – 我是菜鸟和实验.
解决方法
所以你可以拥有以下内容:
用户:安妮,鲍勃,查理,道格拉斯,艾略特,弗雷德和乔治.
角色:普通,编辑,管理员
然后在定义每个组为:
管理员有以下成员:乔治
编辑有以下成员:“管理员”,艾略特
普通有以下成员:“编辑”,“管理员”,安妮,查理
因此,您知道George是Normal,Editor和Admin的成员,因为Admin的所有成员都包含在这些组中,而Douglas只是Editor和Normal的成员,而Anne只是普通用户,AD会说“是的,乔治是普通用户”,如果你问的话.
但是:据我所知,没有(据我所知)官方的,MS支持的ActiveDirectory RoleProvider,它将使用正确的AD角色填充RolesPrinciple–有几个你有什么定义为你的角色提供者?
默认的ASP.NET角色提供程序不支持角色层次结构,因此您可能需要:
>将用户置于他们有权访问的每个角色中,并仅检查您感兴趣的角色.
>将用户置于他们可以访问的最强大角色中,然后检查应该具有访问权限的每个角色.
>编写/查找支持层次结构的role provider – 如果用户处于更高阶的角色,则返回true.