首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为树(邻接列表)结构数据库设置用户权限?

如何为树(邻接列表)结构数据库设置用户权限?
EN

Stack Overflow用户
提问于 2012-08-21 16:09:47
回答 1查看 807关注 0票数 4

我们正在使用mysql。假设我们有一个邻接列表模型表。(我知道这还没有正常化。)例如,人员表中的字段如下:

代码语言:javascript
复制
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     |

我们也有一个与一些用户的桌子。例如,

代码语言:javascript
复制
Uers
|userid|role   |
----------------
|super1|b1     |
|super2|b2     |
|user1 |sd     |
|ruut  |admin  |

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

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

人事表很大,有数万行。

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

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

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

用户数量大约有数百人。角色数少于100个。

如果不清楚,请问我一些问题。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-08-21 16:23:37

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

进入实现,创建另一个表"User_EMPL_ACCESS",它应该如下所示:

表USER_EMPL_ACCESS( User_ID char(..),ACCESS_PATH char(..) )

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

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

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

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

现在您的查询如下所示:

代码语言:javascript
复制
    select * from SALARY_TABLE where MONTH = 'JAN' 
    and hasAccess('myUserID', SALARY_TABLE.EMPLID) = 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12058943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档