最近看公司的代码,对权限管理颇有兴趣,恰好今天有空,就记录了以下,如果有错误,还望指正
正统表结构:
从图上可以看出,表结构主要有User Role Function 三个表,分别对应用户、角色、功能,通过这三张表完成权限的控制和实现。
User 与 Role 是多对多关系,使用第三方UserRole表来维护
Role 与 Function 同样也是多对多的关系,多个角色对应多个功能(每个模块都有对应的id,功能即模块,即menu),使用第三方表RoleFunction来维护
大概思路:
用户登陆时加载菜单,根据用户查询用户角色,根据用户角色查询用户功能,将查询到一个menu code,然后返回这些menu code
在控制层在根据menu code 获取并加载菜单
但是无法对每个menu 中的按钮权限进行控制(比如添加、删除、审核)
解决办法:在Role和Function的第三方表中插入一列:menu_btn,代表该该角色下的功能拥有什么样的按钮权限
然后查询时,封装一个拥有menu_btn的实体类menu,用来记录权限,如果没有任何button,则不显示任何菜单
项目做法:
表结构:
T_SYS_USER 用户表
T_SYS_ROLE 角色表
T_SYS_USER_ROLE 用户角色关系表
T_SYS_MENU 功能表
T_SYS_ROLE_PRIVILEGE 按钮权限
[关于权限按钮列表]:
系统有固化的权限按钮,新增,修改,删除,查看,审核..
名称对应:ADD_BTN,MOD_BTN,DEL_BTN,VIEW_BTN,AUDIT_BTN…应:ADD_BTN,MOD_BTN,DEL_BTN,VIEW_BTN,AUDIT_BTN…<