0

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

安全检查的工作原理如下为每个请求(在性能方面的原因的地方使用,但是从这个列表中排除缓存):

  1. 查询AD用户组列表成员
  2. 查询数据库列表用户和组访问请求的资源
  3. 将来自AD的结果与数据库结果进行比较。如果用户显式拥有权限,或者用户所在的组拥有权限,则允许访问,否则不要。

问题出现在我们有嵌套组时。比方说,我们有两个组:ParentGroupChildGroup,其中ChildGroup是在Active Directory和在那里我们的用户是ChildGroup成员ParentGroup的成员。根据上面的逻辑,如果我们给ChildGroup访问资源,那么用户也可以访问资源。

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

所以问题是,为了使它工作,我如何描述它“逻辑上”应该,我应该在哪里解决问题,并且是否有某种方法可以更好地工作然后呢?

回答

0

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

+0

我的代码曾经以这种方式工作,但它一直都不准确。例如:用户连接到网站,“IsInRole”为组“A”返回false。用户然后被添加到组“A”,但不会从他们的计算机注销。用户再次访问该网站,“IsInRole”仍然返回false。为了避免这个问题,我们直接连接到AD来执行检查。 – Peter 2011-06-24 02:16:07