一、RABC的思想
RBAC (Role-Based Access Control
) 是基于角色的访问控制。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。
实际操作起来就是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。
这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理。这种“权限赋予给角色,把角色又赋予用户”的权限设计既清晰,又易管理。
二、数据表设计
RBAC模型中的权限是由模块和行为合并在一起而产生的,在MySQL中,有模块表(lk_module)
和行为表(lk_action)
,这两张表的记录合并在一起就行程了权限记录,保存在权限表(lk_permission)
中。
权限与角色的映射关系保存在角色表(lk_role)
中,并且权限permission字段采用JSON格式。
三、人员授权
基于第二部分中的数据表设计,对人员的授权其实是为人员赋予对应的角色。只需要在人员表中增加一列role,用于存储该用户拥有的角色。
查询用户的权限,则可以简单通过表拼接来实现。
SELECT *
FROM tb_user u
JOIN tb_role r ON JSON_CONTAINS(u.role, CAST(r.id AS CHAR))
JOIN tb_permission p ON JSON_CONTAINS(r.permissions, CAST(p.id AS CHAR))
WHERE u.id = 4 AND u.status = 1;
这样,就把人员与直接的权限解耦了,针对具有相同权限的同一批人可以快速管理。