作者:PioneerYi链接:https://juejin.|如何设计一个通用的权限管理系统?说的太详细了!( 三 )


作者:PioneerYi链接:https://juejin.|如何设计一个通用的权限管理系统?说的太详细了!

用户角色权限关系
2.2、引入用户组的RBAC模型
如果用户数量比较庞大 , 新增一个角色时 , 需要为大量用户都重新分配一遍新的角色 , 工程量巨大 , 此时可以引入用户组的概念 。 如果部分用户的使用场景是相对一致和基础的 , 可以把这些用户打包成一个组 , 基于这个组的对象进行角色和权限的赋予 。 最终用户拥有的所有权限=用户个人拥有的权限+该用户所在用户组拥有的权限 。
2.3、角色分级的RBAC模型
在一些业务场景中 , 上层角色需要继承下层角色的全部权限 , 此时则需要使用角色继承的RBAC模型 。 此时除了对角色进行定义 , 还需要管理角色间的关系 , 通过关系来体现角色的层级关系 , 从而达到继承权限的效果 。 角色的继承关系主有两种:树形图和有向无环图 。
作者:PioneerYi链接:https://juejin.|如何设计一个通用的权限管理系统?说的太详细了!

角色继承模式
继承关系常常来源于公司团队的组织架构 , 此时常常将角色与组织结构进行关联达到继承角色模型的效果 。
2.4、角色限制的RBAC模型
在一些产品或系统中 , 部分角色可能是需要隔离的、不允许被同时赋予一个人的 , 比如不能既是运动员又是裁判员 。 因此 , 有些角色存在互拆关系 。 此外 , 限制还可能是数量上的 , 比如某个产品组中有且只有一个管理员 , 不允许删除或再分配其他管理员 。
根据不同的业务需求 , 限制的形式很多 , 需要注意的是不能仅仅依赖后段限制 , 而是要在前端展示清晰的规则和恰当的限制 , 避免用户出错 。
2.5、权限管理的基本元素
权限管理的基本元素为:用户 , 角色 , 资源 , 操作 , 权限 。
1、用户应用系统的具体操作者 , 用户可以自己拥有权限信息 , 可以归属于0~n个角色 , 可属于0~n个组 。 他的权限集是自身具有的权限、所属的各角色具有的权限、所属的各组具有的权限的合集 。 它与权限、角色、组之间的关系都是n对n的关系 。
2、用户组(可选)为了更好地管理用户 , 对用户进行分组归类 , 简称为用户分组 。 组也具有上下级关系 , 可以形成树状视图 。 在实际情况中 , 我们知道 , 组也可以具有自己的角色信息、权限信息 。
3、角色为了对许多拥有相似权限的用户进行分类管理 , 定义了角色的概念 , 例如系统管理员、管理员、用户、访客等角色 。 角色具有上下级关系 , 可以形成树状视图 , 父级角色的权限是自身及它的所有子角色的权限的综合 。 父级角色的用户、父级角色的组同理可推 。
4、资源权限管理的一个单元实体对象 , 我们广义的称之为资源 , 可以是一个人 , 也可以是一个产品 , 一个文件 , 一个页面等等 。 5、操作对资源进行的实际操作 , 比如读、写、编辑等等 。
6、权限资源+操作 , 构成一个权限控制点 。
对象间的关系包括:
是否关系
继承关系
限制关系(互斥、范围限制、边界限制、字段限制)
三、数据表设计
按照RBAC模型 , 数据库可以这样设计:
1、产品表(t_product_info)
2、产品成员表(t_product_member)
3、用户信息表(t_user_info)
4、用户角色表(t_user_role)
5、角色表(t_role)
6、基础角色表(t_role_base)
7、角色权限表(t_role_permission)
8、用户组表(t_user_group , 可选)
9、组角色表(t_user_group_role , 可选)
10、用户权限表(t_user_permission , 可选)
四、角色及权限点设计
权限控制的整个过程可以描述为:“谁”对“什么”进行什么”操作" , 从而 , 引出我们需要做的工作有:角色设计 , 资源定义 , 以及对资源的操作定义 。 再详细描述下 , 鉴权就是根据用户身份(角色)获得其对那些资源 , 可以进行什么操作 , 其中对资源的操作做为一个独立的权限体 。