将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部

Posted

技术标签:

【中文标题】将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部【英文标题】:Add users and groups to other groups and get all the hierarchy to top using sql 【发布时间】:2014-12-14 07:40:57 【问题描述】:

我想以一种可以将用户分配给组并将组分配给其他组的方式制定组策略,因此我创建了一个数据库表

table groups  Type, EntityID, GroupID 

用户类型可以是 1,组可以是 2

例如,如果我有一个类型为 1 和 entityID = 1groupid = 2 的实体 这意味着 id 1 的用户属于 id 2 的组,依此类推,类型 2 的组也是如此

当一个组有groupID = NULL 时,这是一个根组,这意味着该组没有父组。

我想编写一个选择查询,返回用户所属组的所有层次结构

Groups

ID  Type Entity GroupID
-----------------------    
    1   2   1   NULL
    2   2   2   1
    3   2   3   NULL
    4   2   4   3
    5   2   5   4
    6   2   6   5
    7   2   7   6
    8   1   1   6

例如,最后一行包含属于组 6 的用户,组 6 属于 g5,g5 属于 g4,g4 属于 g3,g3 是根组

所以如果我运行查询,它应该返回这样的结果

Type EntityID GroupID
2   3   NULL
2   4   3
2   5   4
2   6   5

任何建议

【问题讨论】:

【参考方案1】:

使用 cte

复制下面的代码

    WITH UserBelongTo (Type,EntityID,GroupID)
AS
(
    select a.Type, a.EntityID, a.GroupID from Groups a 
    where a.EntityID in  (select Groups.GroupID from Groups where EntityID=1 and Type=1)
    and a.Type=2

    union all
    select a.Type, a.EntityID, a.GroupID from Groups a 
    inner join UserBelongTo c on c.GroupID=a.EntityID
    where  a.Type=2
)   

select distinct  * from UserBelongTo

【讨论】:

以上是关于将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部的主要内容,如果未能解决你的问题,请参考以下文章

Azure SQL - 如何将 AD 用户添加到 SQL 池数据库

Python Keycloak 获取用户的角色和组

组策略 之 域中登陆域用户自动添加到管理员组

Cakephp auth 和 acl 未登录用户组

powershell 将帐户(用户和组)复制到其他站点。同时编辑登录的前缀部分。

如何取消Access 用户和组权限