权限管理思路 & 代码实现
权限思路:
页面原型:
!
在页面中包含有用户名,密码,角色和验证码。角色是在访问登录页面的时候通过ajax去后台加载的数据。当点击登录的时候,表单将页面中的用户名,密码,角色id和验证码传入后台进行验证。
跳转逻辑:
当登录成功以后,在页面中会显示如图2,先点击用户管理 ,跳转到图3 ,然后进行角色分配,当角色分配好了以后,点击左侧的 角色管理 跳转到图4显示所有的角色,然后点击角色列表中的 菜单分配 跳转到图5进行分配菜单,分配完成后会返回到 角色列表 ,点击 分配模块 跳转到图7 ,可以在点击对应权限的复选框对模块进行授权。
数据库表设计:
数据库设计如下图:
控制器及方法列表:
以下是各个Action中的方法列表:
- LoginAction:
- login 验证登录
- logout 用于安全退出
- MenuAction:
- findAll 查询所有菜单数据
- findAllInRoleToJson 查询角色里面所有的菜单,用于登录成功后的左侧菜单,json
- findAllOfDistributeToJson 查询所有菜单,用于角色里面的菜单分配,返回json
- findAllOfDistribute 返回分配菜单的视图
- RoleAction:
- findAll 查询所有角色数据
- findAllOfLoginToJson 查询所有的角色,返回json数据,用于登录时选取角色
- findAllOfDistribute 查询所有角色,用于用户管理里面的角色分配
- distributeMenu 分配菜单
- distributeModule 分配模块
- UsersAction:
- findAll 查询所有用户数据
- findAllRoleInUserToJson 查询对应用户里面的角色,用户分配角色是数据回显,json
- distributeRole 分配角色
- ModuleAction:
- findAll 查询所有的模块信息
- findAllOfDistribute 查询所有的模块,用于在角色管理里面分配模块
核心代码思路:
在授权完成后 过滤权限的时候,需要知道即将执行的action以及对象的方法是否有对应的权限,首先需要在登录成功以后去后台查询该用户所对应的所有的菜单列表和模块列表,菜单列表用于显示在左侧菜单里,而模块列表用于在访问的时候过滤请求的操作意图。
在左侧菜单中显示的菜单就是分配好的菜单
在过滤请求里面的操作意图就是分配给角色的模块权限
过滤思路:
在系统中定义一个注解(Permissions)和枚举类(Permission)
Permissions:
/**
* 权限注解 用于方法和类上面
* @author Administrator
*
*/
@Target({ElementT