【问题标题】:How to set user permissions for a tree (adjacency-list) structure database?如何为树(邻接列表)结构数据库设置用户权限?
【发布时间】:2012-08-17 00:56:57
【问题描述】:

我们正在使用 mysql。假设我们有一个 Adjacency List 模型表。 (我知道它没有标准化。)例如,personal table 的字段如下:

Personnel
|employee|boss    |salary|
--------------------------
|CEO     |null    |999999|
|boss1   |CEO     |99    |
|boss2   |CEO     |99    |
|slvdrvr1|boss1   |9     |
|slvdrvr2|boss1   |9     |
|slave1  |slvdrvr1|1     |
|slave2  |slvdrvr1|1     |
|slave3  |slvdrvr1|1     |
|slave4  |slvdrvr2|1     |
|slave5  |boss2   |1     |
|slave6  |boss2   |1     |

我们还有一张桌子,里面有一些用户。例如,

Uers
|userid|role   |
----------------
|super1|b1     |
|super2|b2     |
|user1 |sd     |
|ruut  |admin  |

假设工资信息是机密的。因此,一些用户可以从某个分支看到工资信息。

例如,角色 b1 可以查看/编辑老板 1 及以下的所有工资。角色 b2 可以查看/编辑老板 2 及以下的所有工资。角色 sd 可以查看/编辑 slvdrvr1 和 slvdrvr2 及以下的所有工资。因此,我们需要设置一个用户-人员权限表来实现这一点。

Personnel 表很大,有数万行。

我的问题是我们如何设置一个我们可以轻松维护和查询的权限表?

例如,选项1:我们可以为每个人设置角色权限。但是,权限表会很大。

选项2:我们只能为父节点设置角色权限。但是,每次用户想要查看一定数量的记录时,我们都必须为每条记录查找权限,一直到我们有设置的地方。

用户数约为数百。 角色数量少于 100 个。

如果不清楚,请向我提问。提前致谢。

【问题讨论】:

    标签: mysql permissions tree adjacency-list


    【解决方案1】:

    为了让生活更有趣,考虑在用户之间也有一个树形结构!

    开始实现,创建另一个表“User_EMPL_ACCESS”,它应该如下所示:

    表 USER_EMPL_ACCESS( User_ID 字符(..), ACCESS_PATH 字符(..) )

    在访问路径中,存储每个用户有资格看到的最顶层节点的完全限定路径。

    然后,开发一个名为 hasAccess (userID, EMPLID) 的 UDF。

    hasAccess 函数应该执行以下操作:

    1. 从用户 ID 开始
    2. 从 USER_EMPL_ACCESS 获取用户的访问路径
    3. 使用 CTE 逻辑将邻接表扩展为完全限定的路径。如果您的数据库不提供 CTE,请将 Adjacency Model 转换为 NestedSet 模型。
    4. 从根开始获取用户访问路径和邻接路径的交集
    5. 如果输入的 EMPLID 是上述任一交叉路径的叶节点,则返回 1,否则返回 0。

    现在您的查询如下所示:

        select * from SALARY_TABLE where MONTH = 'JAN' 
        and hasAccess('myUserID', SALARY_TABLE.EMPLID) = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2019-07-25
      • 2013-06-21
      • 1970-01-01
      相关资源
      最近更新 更多