2009-04-16 43 views
5

在我的asp.net mvc应用程序中,我使用的是activedirectorymembershipprovider。在活动目录中,我创建了几个角色(组),为简单起见,这个例子是“普通”和“管理员”。我如何使用activedirectorymembershipprovider在asp.net mvc应用程序中实现角色层次结构

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

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

我该如何得到这种行为 - 我必须实现一些自定义逻辑,允许我请求角色“管理员”,但实际上要求在后台的活动目录中同时要求“正常”和“管理员” - 或者是否有可能以某种方式自动给我这个行为的活动目录结构组?

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

回答

3

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

所以,你可以有以下几种:

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

角色:正常,编辑,管理

然后在定义每个组为:

管理员具有以下成员:乔治

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

正常有以下成员:“Editor”,“Admin”,Anne,Bob,Charlie

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

但是:没有(据我所知)的官方,MS支持的ActiveDirectory RoleProvider将填充RolesPrinciple与正确的AD角色 - 有一对夫妇在那里like this one on CodePlex你有什么定义作为你的角色提供者?

ASP.NET的默认角色提供不支持角色层次,所以你要么需要:

  1. 把用户每次访问的作用,只检查你的角色
  2. 将用户置于他们可以访问的最强大的角色中,然后检查应该有权访问的每个角色。
  3. 编写/查找支持层次结构的role provider - 如果用户处于更高层次的角色中,则返回true即可。
+1

当您定义Normal角色/组时,您是否需要将“Admin”添加为该组的成员? (我的猜测并不是因为管理员已经包括在正常组中的编辑组中。 – Guy 2009-05-15 20:37:30

1

Active Directory在成员资格方面确实没有层次结构的概念。用户是一个,几个,许多组的成员 - 但仅此而已。他是“Admin”组的成员 - 是或否。他也可能是GRoup A,Gropu B,F组和M组的成员 - 但是你没有找到真正的“角色层次”。

我想,从某种意义上说,能够将任意数量的组成员关系组合起来,可能比拥有层次结构更加灵活可靠。

Marc

相关问题