用户-角色-权限

来源:互联网 发布:快压压缩软件 编辑:程序博客网 时间:2024/06/06 00:00

最近因为要用到权限这个东西,感觉脑袋很是有点乱,昨天硬是搞到大半夜才终于理清了思路。
现在我就将我的思路和大家分享一下,不敢保证完全正确,大家看看便罢。看看便罢

一般我们使用到 用户-角色-权限 这三张表的时候,会发现表里会有很多字段,然后相对应的外键也是很多,往往我们就容易混乱。现在我这边列举的三张表就是最简单的三张表,仅仅是用户-角色-权限三者的关系。

==================

先举个例子:
用户1:老王 ——- 经理
角色:超级管理员
权限:什么权限都有1.。。。;2,。。。3.。。。。好多好多

用户2:小王 ——- 销售主管
角色:普通管理员A
权限:1、管理销售部门人员的流失;2、管理销售部门人员的业绩 ;3、管理销售部门新人的培训

用户3:老李 ——- 很厉害的存在
角色:普通管理员A,管理员AAA
权限:1、管理销售部门人员的流失;2、管理销售部门人员的业绩 ;3、管理销售部门新人的培训;4、——-;5、——-;6、——-。

OK,我们分析一下,很明显权限是相对于角色来说,角色是相对于用户来说。如果用户直接对应权限的话,那么权限肯定得不到细化,以及维护都会使得耦合度增加,而且角色的存在也会方便我们的操作。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

中间表:
试想一下,我们10个用户分别对应10角色的话,要是没有中间表的存在,我们该怎么建立相对应的关系?

我们中间表就两个字段,两个外键分别对应两个表主键
user_role :userid,roleid
role_function:roleid , funcid

==================

下面的将是基于 权限是相对于角色来说,角色是相对于用户 的基础来讲

用户——角色 (ManyToMany)

首先用户角色最少会有三张表关系。用户表(user)、角色表(role)、中间表(user_role)

这里写图片描述

我们最终目的是查询出该用户所拥有的权限,而权限依赖角色,那么我们就先要查询出该用户所处的角色

r.id from role r inner join user_role ur onr.id=ur.roleid inner join user u on u.id=ur.userid where u.id=5
这样我们就通过中间表查询出该用户所处的角色的id (r.id=5,6,7)


角色——权限(ManyToMany)
角色表(role)、权限表(function)、中间表(role_function)
这里写图片描述

上面我们已经将用户所处的角色的id已经查询出来,那么我们就可以通过角色的id查询出该用户的权限了

from function f inner join role_function uf on f.id=uf.FUNCID inner join role r on r.id=uf.roleid where r.id in(‘5’,’6’,’7’)
现在该用户所处的权限就已经查询出来

慢慢想一下,其实就这么简单,难得可比这复杂不知道多少倍。

有不足之处还请大家多多指正,谢谢!