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

时间:2009-04-16 14:11:47

标签: asp.net-mvc active-directory asp.net-membership

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

AD是否支持组成为另一组成员的概念?

所以你可以拥有以下内容:

用户: Anne,Bob,Charlie,Douglas,Elliot,Fred和George。

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

然后在将每个组定义为:

管理员有以下成员:George

编辑有以下成员:“管理员”,道格拉斯,艾略特

普通有以下成员:“编辑”,“管理员”,安妮,鲍勃,查理

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

HOWEVER:没有(据我所知)一个官方的,MS支持的ActiveDirectory RoleProvider ,它将使用正确的AD角色填充RolesPrinciple - 有一对夫妇like this one on CodePlex你定义了哪些角色提供者?

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

  1. 将用户置于他们有权访问的每个角色中,并仅检查您感兴趣的角色。
  2. 将用户置于他们可以访问的最强大的角色,然后检查应该有权访问的每个角色。
  3. 编写/查找支持层次结构的role provider - 如果用户处于更高级别的角色,则通过返回true来单独执行。

答案 1 :(得分:1)

Active Directory在成员资格方面确实没有层次结构的概念。用户是一个,几个,多个组的成员 - 但就是这样。他是“管理员”小组的成员 - 是或否。他也可能是GRoup A,Gropu B,F组和M组的成员 - 但是你找不到真正的“角色等级”。

我认为,在某种程度上,在我看来,能够组合任意数量的群组成员资格可能比拥有层次结构更加灵活和可靠。

马克