我们有一个安全模块,它基于组/角色成员资格,控制对 ASP.Net 中资源的权限。我已经构建了一个自定义 ASP.Net 角色提供程序,它可以查询 Active Directory 的组成员身份,并且由该模块使用。
对于每个请求,安全检查的工作方式如下(出于性能原因在某些地方使用缓存,但不包括在此列表中):
- 查询 AD 以获取用户组成员身份列表
- 查询数据库以获取有权访问所请求资源的用户和组的列表
- 将 AD 的结果与数据库的结果进行比较。如果用户明确拥有权限,或者用户所在的组拥有权限,则允许访问,否则不允许。
当我们有嵌套组时,问题就出现了。假设我们有两个组:ParentGroup和ChildGroup,其中ChildGroup是 Active Directory 中 ParentGroup 的成员,而我们的用户是ChildGroup的成员。根据上面的逻辑,如果我们让ChildGroup访问资源,那么用户也可以访问该资源。
现在逻辑上(无论如何对我来说)如果我们让ParentGroup访问资源,那么它的所有成员,以及递归获取的任何子组及其成员,也应该能够访问所述资源。但是相反,由于我的逻辑工作方式,他们无法访问资源。上面列表中的第 1 步没有看到ParentGroup它只看到了ChildGroup,第 2 步只看到了 ParentGroup而没有看到ChildGroup。
所以问题是,为了让它发挥作用,我应该如何“逻辑地”描述它,我应该在哪里解决问题,是否有一些方法比另一种更好?