如何使用activedirectorymembershipprovider在asp.net mvc应用程序中实现角色层次结构

har*_*ife 5 asp.net-mvc asp.net-membership active-directory

在我的asp.net mvc应用程序中,我正在使用activedirectorymembershipprovider.在活动目录中,我创建了几个类似的角色(组),为了简化本例,"普通"和"管理员".

我目前通过获取httpcontext的IPrincipal并调用User.IsInRole(nameOfRoleGoesHere);来查询用户是否处于角色中.

我正在寻找的行为是让我能够询问用户是否处于角色"管理员",然后隐含地询问用户是否处于以下所有角色(在这种情况下,角色"正常"将低于"管理员").由于我的角色主要是垂直的(如果这有任何意义),这种角色继承似乎对我的应用程序有意义.

我怎么能得到这种行为 - 我必须实现一些自定义逻辑,允许我要求角色"管理员",但抽象实际上在幕后的活动目录中要求"正常"和"管理员" - 或者是否可以活动目录中的结构组以某种方式自动给我这个行为?

对我对asp.net,活动目录和.net安全的任何严重误解表示歉意 - 我是菜鸟和实验.

Zha*_*uid 3

AD 支持一个组是另一个组的成员的概念吗?

所以你可以有以下内容:

用户:安妮、鲍勃、查理、道格拉斯、埃利奥特、弗雷德和乔治。

角色:普通、编辑、管理员

然后将每个组定义为:

管理员有以下成员: 乔治

编辑有以下成员:“Admin”、Douglas、Elliot

Normal有以下成员:“Editor”、“Admin”、Anne、Bob、Charlie

因此,您知道George是Normal、Editor和Admin的成员,因为Admin的所有成员都包含在这些组中,而Douglas只是Editor和Normal的成员,而Anne只是Normal用户,AD会说如果您问的话,“是的,乔治是普通用户”。

然而:(据我所知)没有一个官方的、MS 支持的 ActiveDirectory RoleProvider可以用正确的 AD 角色填充 RolesPrinciple - CodePlex 上有几个像这样的角色提供程序,您将其定义为您的角色提供程序?

默认的 ASP.NET 角色提供程序不支持角色层次结构,因此您需要:

  1. 将用户置于他们有权访问的每个角色中,并仅检查您感兴趣的角色。
  2. 将用户置于他们可以访问的最强大的角色中,然后检查应具有访问权限的每个角色。
  3. 编写/查找支持层次结构的角色提供程序- 如果用户处于更高级别的角色,则只需返回 true 即可。