处理嵌套组权限(ASP.NET角色提供程序)

时间:2010-12-13 15:44:11

标签: asp.net active-directory roleprovider active-directory-group security-roles

我们有一个安全模块,它基于组/角色成员身份,控制ASP.Net中资源的权限。我已经构建了一个自定义的ASP.Net角色提供程序,它可以在Active Directory中查询组成员身份以及该模块使用的内容。

对于每个请求,安全检查的工作方式如下(出于性能原因但在此列表中排除的地方使用缓存):

  1. 查询AD以获取用户组成员资格列表
  2. 查询数据库以获取有权访问所请求资源的用户和组列表
  3. 将AD的结果与数据库的结果进行比较。如果用户明确拥有权限,或者用户所在的组具有权限,则允许访问权限,否则不允许访问权限。
  4. 当我们有嵌套组时会出现问题。假设我们有两个组: ParentGroup ChildGroup ,其中 ChildGroup 是Active Directory中 ParentGroup 的成员,我们的用户是 ChildGroup 的成员。根据上面的逻辑,如果我们给 ChildGroup 访问资源,那么用户也可以访问该资源。

    现在逻辑上(对我而言)如果我们给 ParentGroup 访问资源,那么它的所有成员,以及递归获取的任何子组及其成员也应该能够访问所述资源。但相反,由于我的逻辑工作方式,他们无法访问资源。上面列表中的第1步没有看到 ParentGroup 它只看到 ChildGroup ,而第2步只看到 ParentGroup 而没有看到 ChildGroup

    所以问题是,为了使它工作我如何描述它“逻辑”应该,我应该在哪里解决问题,是否有一些方法可以更好然后另一个?

1 个答案:

答案 0 :(得分:0)

尝试使用WindowsPrincipal.IsInRole()方法,而不是直接查询AD。我发布了一些可能有帮助的示例代码over here

相关问题