引言
java ee在项目中一般需要进行权限管理,权限管理控制角色的相关权限,如菜单的显示,菜单二级菜单的权限,三级操作的权限等等。当项目越来越大,菜单越多,二级及三级菜单添加频繁,就需要良好的权限管理。这对前期数据库的设计非常重要,下面已某支付公司后台管理系统的权限管理为模板作初步的分析。
数据库基本设计
以下只列举了关联字段或者重要字段
1.菜单:逻辑数据,为主菜单和二级子菜单的固定数据
m_menu
+ id,
+ name,
+ parent_menu_id,
//主菜单id为1,5,10,15,20; parent_menu_id = null
//其他菜单设置parent_id, 如终端日志菜单(二级菜单)(id = 41), parent_menu_id = 15(终端监控 一级菜单)
2.视图:逻辑数据,为二级菜单的name, desc和其主菜单的对应关系逻辑,固定数据
m_view
+ id
+ name
+ desc
+ menu_id
//终端日志二级菜单数据: 31,TerminalLog, TerminalLog, 15
3.权限列表:逻辑数据,为功能操作与视图的对应逻辑关系,固定数据
m_permission
+ id
+ name
+ view_id(非FK)
//id(1,2,3,4)为增删改查,id其他为各个二级菜单(view_id对应于二级菜单视图)下的功能,如应用配置,默认参数,配置等等
//终端日志需要查询功能, (null, 0, query, 31) –> id:
4.视图权限: 固定数据,即当前权限能否显示这个视图
r_view_permission
+ id
+ permission_id
+ view_id
//终端日志功能的query查看功能需要权限,(null, 1, 31)
5.角色: 相对固定数据,为当前系统中的角色列表
m_role
+ id
+ name
+ desc
//如”admin”(1, admin, 管理员)
6.角色-菜单关系:动态数据,由客户自己设置,控制某角色菜单是否显示在index页面
r_menu_role
+ id
+ menu_id
+ role_id
//为admin添加终端日志菜单,显示在主页面 (null, 41, 1)
7.角色权限:动态数据,有客户自己设置,控制某角色是否有在菜单上操作三级菜单功能的权限
r_permission_role
+ id
+ permission_id
+ role_id
+ view_id
//这里我们给admin角色 添加 终端日志菜单 的 查询功能 (null, 1, 1, 31)
总结
总的来说控制菜单和功能权限就是两点:
1. 是否有显示菜单权限 r_menu_role,
2. 显示菜单后是否有操作菜单下三级功能的权限 r_persmission_role