在实际项目中,权限控制是必须要放到数据库管理的,我们来看下springrain是怎么设计权限的表结构吧.

ER图

数据库ER图

t_org是部门表,考虑到员工兼职,所以有t_user_org 中间表.

t_menu是菜单表,字段 type 是标示是菜单资源还是普通资源 菜单资源的意义就是导航菜单,会显示到左侧导航,普通资源就是菜单内的按钮或者提交路径,这个时候 pid的意义就比较重要了,pid就是上级菜单的id,对于页面普通资源来说,就是相应的导航菜单的url,这样在管理界面能够树形显示出来.

角色菜单

用户正常登陆后,根据用户的角色查询角色拥有的菜单权限,通过树形菜单显示导航,示例效果图如下:
角色菜单权限

每个菜单下一般拥有增删改查导入导出等普通资源,这些也是有权限控制的,后台分配权限示例如下图:
菜单管理

图中 博客管理 是一个导航菜单,其中包含删除博客等动作的普通资源url. 通过 t_menu表中 type 字段进行标示菜单资源或者普通资源,pid字段标示这些普通资源属于 博客管理 这个菜单下.

shiro标签

删除,批量删除等其实就是前台操作的按钮,通过shiro的标签,可以控制按钮是否显示,shiro官方提供了jstl的标签库,springrain是使用了freemarker标签.
以博客管理为例代码截图如下:
页面权限标签

就此 就能灵活分配和管理每个操作的权限.

对于通用的url拦截权限来说,这几张表足够用了.