权限设计方案到底怎么选

发布时间:2026/7/9 8:01:33
权限设计方案到底怎么选 问题是什么首先前提条件也就是讨论权限设计方案的背景是基于RBAC思想使用Shiro框架实现的权限控制系统那这个背景有什么问题呢新增权限时对于每个应有这个权限的角色逐个加权限如果角色很多那就很麻烦新增角色时我需要给这个角色逐个加对应的权限如果权限很多也是比较麻烦。所以要怎么解决这两个问题常见的方案有角色继承和角色复制。解决方案1--角色继承角色继承往往是以拥有通用权限的角色为基础角色父角色其他角色可以继承基础角色自动拥有基础角色所拥有的权限同时也可以有多个不同的基础角色其他角色选择性继承一个基础角色当然其他角色也可作基础角色。是否解决问题再来看看那两个问题新增权限时只需要给基础角色加权限其他角色自动拥有该权限无需逐个添加对于特殊权限只需要单独加即可新增角色时选择父角色自动继承父角色的权限无需逐个添加。具体怎么实现那角色继承怎么实现呢大刀阔斧角色表新加一个parent_id基础角色的parent_id为null或者0权限系统核心是查当前用户的权限集合查用户有没有某个权限时用到没有角色继承的时候是直接查当前用户的角色对应的权限集合现在有了角色继承先递归查询角色链得到角色集合再查角色集合对应的权限集合再来看看角色编辑首先是编辑权限给角色添加权限直接添加即可但是给角色取消权限此时不能取消角色继承过来的权限只能继承角色直接拥有的权限前端需要加disabled属性禁止取消权限那自然需要后端查询当前角色直接拥有的权限集和当前角色所有权限集的差集从而实现前端页面哪个权限可以取消哪个权限不可取消同样前端编辑角色权限保存时后端也要加是否取消了继承过来的权限的校验因为用户可能绕过了前端角色编辑还涉及到选择父角色此时父角色列表不能有当前角色和后代角色。角色新增选择父角色此时父角色列表可以是所有角色。还有删除角色时如果还有后代角色就不能删除。解决方案2-角色复制角色复制顾名思义新增角色可以通过复制现有角色的权限很容易理解可以解决新增角色时的问题但解决不了新增权限时的问题角色复制的实现也很简单前端多了个按钮然后就可以了怎么选那怎么选呢看实际情况选择如果客户觉得角色继承难理解难操作又想快速交付那就角色复制以及很重要的一点是新增权限也是因为新增接口对于产品交付给客户私有化部署的方式往往不需要新增接口也就不需要新增权限自然也没有了第二个问题而角色复制可以说是最好的选择了好理解实现快相较于角色继承可以随便取消角色权限。但要是新增权限很频繁还是建议角色继承只是基于现有项目改造的话改动比较大如果是项目设计阶段那就是实现起来复杂同样要考虑一下客户是否理解