在我的 asp.net mvc 应用程序中,我使用的是 activedirectorymembershipprovider。在事件目录中,为了简单起见,我创建了几个类似于“普通”和“管理员”的角色(组)。
我目前正在通过获取 httpcontext 的 IPrincipal 并调用 User.IsInRole(nameOfRoleGoesHere); 来查询用户是否处于角色中。
我正在寻找的行为是让我能够询问用户是否处于“管理员”角色,然后隐式询问用户是否处于该角色之下的所有角色(在这种情况下,角色“正常”将低于“管理员”) ”)。 由于我的角色主要是垂直的(如果这有意义的话),这种角色继承目前似乎对我的应用程序有意义。
我怎样才能得到这种行为 - 我必须实现一些自定义逻辑,允许我请求角色“管理员”,但抽象出实际上在幕后的事件目录中请求“正常”和“管理员” - 或者是是否可以在事件目录中构建组以某种方式自动给我这种行为?
对于我对 ASP.NET、Active Directory 和 .NET 安全性的任何严重误解表示歉意 - 我是菜鸟并正在尝试。
最佳答案
AD 支持一个组是另一个组的成员的概念吗?
所以你可以有以下内容:
用户:安妮、鲍勃、查理、道格拉斯、埃利奥特、弗雷德和乔治。
角色:普通、编辑、管理员
然后将每个组定义为:
管理员有以下成员:George
编辑有以下成员:“Admin”、Douglas、Elliot
Normal 拥有以下成员:“Editor”、“Admin”、Anne、Bob、Charlie
因此,您知道 George 是 Normal、Editor 和 Admin 的成员,因为 Admin 的所有成员都包含在这些组中,而 Douglas 仅是 Editor 和 Normal 的成员,Anne 只是 Normal 用户,并且如果您询问,AD 会说“是的,George 是普通用户”。
但是:(据我所知)没有一个官方的、MS 支持的 ActiveDirectory RoleProvider 可以用正确的 AD 角色填充 RolesPrinciple - 有那里有一对like this one on CodePlex您将什么定义为您的角色提供者?
默认的 ASP.NET 角色提供程序不支持角色层次结构,因此您需要:
- 将用户分配到他们有权访问的每个角色,并仅检查您感兴趣的角色。
- 将用户置于他们可以访问的最强大的角色,然后检查应具有访问权限的每个角色。
- 写/查找 role provider支持层次结构 - 如果用户处于更高级别的角色,则只需返回 true 即可。
关于asp.net-mvc - 如何使用 activedirectorymembershipprovider 在 asp.net mvc 应用程序中实现角色层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756299/