最简单的权限验证方式代码:
public class RightsUtils { public static boolean testRight(String menuId, String[] rights) { for(String right : rights) { if(menuId.equals(right)) { return true; } } return false; }}通过判断数据库中的权限是否包含了给定的url,也就是菜单的ID.
上文已经有了struts的自定义拦截器,用来拦截未登录的用户,拦截的方法是auth,编写auth用来处理用户的菜单权限:
@Component @Scope("prototype")public class AuthAction extends ActionSupport { @Resource private RoleService roleService; @SuppressWarnings("unchecked") public String authCheck() { User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user"); String rights = user.getRights(); Integer roleId = user.getRoleId(); Role role = roleService.findById(roleId); rights += "," + role.getRights(); if(rights != null) { String[] rightsArray = rights.split(","); Listlist = new ArrayList (); for (int i=0; i menuList = (List
这样,就会根据用户所属角色和自身拥有的权限来展示给不同用户不同的界面可操作信息.
在菜单表中插入一些数据:
在角色表中插入几条测试数据:
用户表中也插入几条测试数据分别属于三种角色中的一种:
然后登录不同的用户:
管理员:
user1:
可以看到已经能够正确的过滤掉一些菜单.
当然这个方法是很不好的,还有一种验证菜单权限的方法:
public class RightsHelper { /** * 利用BigInteger对权限进行2的权的和计算 * @param rights int型权限编码数组 * @return 2的权的和 */ public static BigInteger sumRights(int[] rights){ BigInteger num = new BigInteger("0"); for(int i=0; i
用菜单的Id进行2的权和来实现.
这样,基本就能实现一个最基本的权限控制.