我是在阅读《从零搭建开发脚手架 基于Mybatis-Plus的数据权限实现》这篇违章的时候产生了问题、想知道如何实现以下这种场景
A用户 拥有B、C两个角色、B角色可以查询D部门的所有数据、也就是领导角色,C角色只能查到E部门的自己的数据,也就是普通人员角色 这样的话应该以什么思路实现呢?
1.首先肯定下CSDN这个功能不错,我是收到了官方私信过来的,能很好的及时响应。
2.针对@kEnnponN 你的问题,
问:你一个人在2个部门,且一个是领导角色,一个是普通员工角色?感觉有点儿奇怪啊。
问:针对你的问题,其实就是sql的过滤
deptId = D部门Id
or
(deptId = E部门Id and createBy = loginUserId)
第一步:这里你可以先用本方法去处理达到你的效果。
第二步:尝试抽象成特殊角色 去通用的处理。
这个叫做鉴权,可以定义角色表、操作表,来判断每个用户每个细分权限是否拥有
700
该回答引用GPTᴼᴾᴱᴺᴬᴵ
实现这种数据权限控制,可以考虑在角色和部门之间建立多对多的关系,并在中间表中添加数据权限字段。具体的实现思路可以参考以下步骤:
建立角色和部门之间的多对多关系,可以使用Mybatis-Plus提供的@ManyToMany注解进行实现。
在中间表中添加数据权限字段,比如permission字段,用来表示当前角色在该部门下的数据权限。
对于查询操作,可以通过在SQL中使用LEFT JOIN将用户、角色、部门、中间表四张表连接起来,并根据当前用户的角色和部门对数据进行过滤。
对于插入、更新和删除操作,需要根据当前用户的角色和部门对操作进行权限校验,只有具有权限的用户才能进行操作。
在具体实现时,可以考虑使用AOP实现数据权限控制,将权限控制逻辑从业务逻辑中分离出来,提高代码的复用性和可维护性。