【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
本人没用过Shiro,也没用过任何权限框架。目前项目中的权限都是查询数据中权限表来判断的。所以我不知道Shiro是否能满足我的需求,各位用过的兄弟还请指教。
本人理解的权限分为操作权限和数据权限,操作权限主要是界面上的菜单、按钮等,数据权限是直接针对数据增删该查。
举个例子:
比如有一个员工管理模块,在系统界面上首先一级菜单中 有一个 “员工管理” 的菜单,点击这个菜单进去管理界面。管理界面上面一排按钮,下面一个员工表格。按钮比如有:新增,修改,删除,导入。
现在假设一个用户登录来维护员工,可能产生的鉴权操作有:
1. 当一个用户登录系统,首先需要根据权限加载他能看到的菜单
2. 点击“员工管理”菜单后,加载该用户有权利的按钮以及能看到的员工(例如这个用户是一个分部门的管理员,就应该只能对这个部门下的员工进行维护)
3. 新增、删除、更改员工的时候需要判断是否具有相应数据权限
权限归类:
上面所述的例子中属于操作权限的有:按钮新增,修改,删除,导入;属于数据权限的有:员工的增、删、改、查。
目前我们的做法是:数据库中有角色表、权限表,给角色授予菜单的操作权限、菜单下按钮的操作权限、机构的机构表增删改查的数据权限、员工表增删改查数据权限的权限,这些权限都存在于权限表中。
当用户登录界面时先根据菜单权限加载菜单,然后根据按钮权限灰化或隐藏按钮,然后根据机构权限获取有权限的员工,点击新增后保存新增记录时,还会检查有没有员工的新增的数据权限。
这个过程的所有的鉴权都是直接查库或者硬编码的。部门代码大致如下:
根据菜单权限加载菜单:menuService.getMenus(User user)
按钮权限加载按钮:menuService.getButtons(User user, Menu menu)
机构权限获取有权限的员工:employeeService.getEmplyees(User user) 通过用户角色,通过角色获取单位权限,通过单位权限获取员工(其实这个过程我们在用户登录的时候会先计算一遍,最后直接获取员工的权限就行了)
新增员工:判断是否对员工表有新增权限
public Employee addEmployee(User user, Employee e){
boolean b = permissionService.hasPermission(user, 'T_Employee', 'insert');
if (b) {
employeeService.insert(e);
}
}
说了这么多,也不知道说的是否清楚,目前看了不少shiro的例子,发现都是对操作权限的控制,并没有对数据权限的控制,比如能只能看到该部门下的员工的控制。
赞一个,不知道shiro能不能实现
安全能实现 看来都没仔细研究过
操作权限都可以实现。但是数据范围的权限应该自己写相关的sql吧。
CabloyJS对数据权限控制的实现策略值得参考:概念简洁,开发方便
https://cabloy.com/zh-cn/articles/535f42e8fb8c487fb33b88c9a9e56a7e.html