背景
一个同事最近在做一个权限系统的需求:后台用户拥有多个角色,一个角色拥有多个模块下的功能权限和数据权限。
订单
功能权限
查看订单 (是否有权限)
修改订单 (是否有权限)
发货 (是否有权限)
数据权限
查询范围: 1个月内 1周内 今日
是否显示手机号 0 不显示 1 显示
指定城市: 所有城市,上海市 北京市 深圳市 等
数据加密: 0 是 1 否
科普
权限本质是保护资源,控制始终围绕 菜单 操作 数据 来展开,本文我们统称为资源,只是类型不同而已。
功能权限和数据权限的区别在于,功能权限判断有没有某权限,数据权限是判断有多少权限。
功能权限对资源的安全判断只有YES和NO两种结果(相对简单),而资源权限所要求的是,在同一个数据请求中,根据不同的权限范围返回不同的数据集。
数据权限和业务有很强的关联,复杂度和难度相对较大。
通用的表结构
1 用户表
2 角色表
3 角色权限表
4 资源表
实现
Mybatis 递归查询
更高效的构建树方法(推荐):
Java 端代码
1 功能权限处理,通过拦截器(或者过滤器等)实现
2 数据权限,通过Mybatis 拦截,动态拼接SQL
总结
所有的权限都是围绕功能和数据展开,通过以上实例,基本可以概括所有的权限处理,如果大家有更好的方案,欢迎进行探讨。
本文暂时没有评论,来添加一个吧(●'◡'●)