前言
在实习中开发对后台进行开发时后台的使用用户有多种,需要针对不同的用户进行权限管理,例如:同部门的用户只能看到同部门的人员,部门下的角色只能操作,查看该部门信息
实现技术
- Mybatis-Plus拦截器
- 注解
- 执行器
准备工作
- 1、权限注解根据注解获取被权限管理的所有Bean
- 2、存储权限内占位符名称,以及替换值
- 3、权限列表
鉴权流程
- 创建一个拦截器并且继承 BaseMultiTableInnerInterceptor 实现InnerInterceptor
- 在MybatisConfig配置类中会进行添加拦截器操作,通过注解PropertySource获取资源文件,通过资源文件获取要扫描的包路径
- 在拦截器初始化过程中会调用执行器的构造函数,在执行器的构造函数中,会对被标记的Mapper类和方法进行加载
- 拦截器会在执行sql语句前进行设置where条件,在设置条件时就会调
执行器的getSqlSegment方法
-
查看buildDataFilter方法
- 提前准备数据
</p>
-
进行填充,返回条件
- 最后根据开头的joinStr去掉开头多的OR或者AND返回完整sql条件
- 提前准备数据
小结
灵活使用拦截器对方法进行拦截,拦截后通过获取标签对象中的值获取条件语句中需要的值,也可以通过对Service的Bean创建名称,执行指定方法获取需要的值进行填充
个人看法
个人认为还可以做的更加灵活,现在这个枚举类规定不够灵活,可以将其创建在数据中,在登录的时候可以进行查询权限,加入到loginUser的用户信息缓存中