mysql – 如何为树(adjacency-list)结构数据库设置用户权限?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 如何为树(adjacency-list)结构数据库设置用户权限?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1892字,纯文字阅读大概需要3分钟。
内容图文
我们正在使用mysql.假设我们有一个Adjacency List模型表. (我知道它没有规范化.)例如,人员表的字段如下:
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可以查看/编辑来自boss1和down的所有工资.角色b2可以查看/编辑来自boss2和down的所有工资.角色sd可以查看/编辑slvdrvr1和slvdrvr2及以下的所有工资.因此,我们需要设置用户 – 人员权限表来实现此目的.
人员表很大,有数万行.
我的问题是我们如何设置一个我们可以轻松维护和查询的权限表?
例如,选项1:我们可以为每个人设置角色权限.但是,权限表将是巨大的.
选项2:我们只能为父节点设置角色权限.但是,每当用户想要查看一定数量的记录时,我们必须查找每个记录的权限,直到我们拥有设置的位置.
用户数量约为数百.
角色数小于100.
如果不清楚,请问我问题.提前致谢.
解决方法:
为了让生活更有趣,请考虑在用户中使用树形结构!
来实现,创建另一个表“User_EMPL_ACCESS”,它应该如下所示:
表USER_EMPL_ACCESS(
User_ID char(..),
ACCESS_PATH字符(..)
)
在访问路径中,存储每个用户有资格查看的最顶层节点的完全限定路径.
然后,开发一个名为hasAccess的UDF(userID,EMPLID).
hasAccess函数应该执行以下操作:
>从UserID开始
>从USER_EMPL_ACCESS获取用户的访问路径
>使用CTE逻辑将Adjacency Table扩展为完全限定的路径.如果您的数据库未提供CTE,请将Adjacency Model转换为NestedSet模型.
>从根开始获取用户访问路径和邻接路径的交集
>如果输入EMPLID是上述任何交叉路径的叶节点,则返回1否则返回0.
现在您的查询如下所示:
select * from SALARY_TABLE where MONTH = 'JAN'
and hasAccess('myUserID', SALARY_TABLE.EMPLID) = 1
内容总结
以上是互联网集市为您收集整理的mysql – 如何为树(adjacency-list)结构数据库设置用户权限?全部内容,希望文章能够帮你解决mysql – 如何为树(adjacency-list)结构数据库设置用户权限?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。