title: springrain技术详解(2)-权限表结构 CreateTime: 2013-12-11 09:38:00 UpdateTime: 2013-12-11 09:38:00 CategoryName: web --- --- title: "springrain技术详解(2)-权限表结构" date: 2013-12-11T09:38:00+08:00 draft: false tags: ["springrain"] categories: ["web"] author: "springrain" --- 在实际项目中,权限控制是必须要放到数据库管理的,我们来看下springrain是怎么设计权限的表结构吧. ## ER图 ![数据库ER图](/public/springrain4-basetable-er-table.png) t_org是部门表,考虑到员工兼职,所以有t_user_org 中间表. t_menu是菜单表,字段 type 是标示是菜单资源还是普通资源 菜单资源的意义就是导航菜单,会显示到左侧导航,普通资源就是菜单内的按钮或者提交路径,这个时候 pid的意义就比较重要了,pid就是上级菜单的id,对于页面普通资源来说,就是相应的导航菜单的url,这样在管理界面能够树形显示出来. ## 角色菜单 用户正常登陆后,根据用户的角色查询角色拥有的菜单权限,通过树形菜单显示导航,示例效果图如下: ![角色菜单权限](/public/springrain4-basetable-user-role-menu.jpg) 每个菜单下一般拥有增删改查导入导出等普通资源,这些也是有权限控制的,后台分配权限示例如下图: ![菜单管理](/public/springrain4-basetable-menu-resource.jpg) 图中 博客管理 是一个导航菜单,其中包含删除博客等动作的普通资源url. 通过 t_menu表中 type 字段进行标示菜单资源或者普通资源,pid字段标示这些普通资源属于 博客管理 这个菜单下. ## shiro标签 删除,批量删除等其实就是前台操作的按钮,通过shiro的标签,可以控制按钮是否显示,shiro官方提供了jstl的标签库,springrain是使用了freemarker标签. 以博客管理为例代码截图如下: ![页面权限标签](/public/springrain4-basetable-qx_button.jpg) 就此 就能灵活分配和管理每个操作的权限. 对于通用的url拦截权限来说,这几张表足够用了.