客户需求,3个权限控制:a,超级管理员;b,分公司管理员;c,负责人(负责人 是分公司 填报业务的人员)
一、思路
在角色表中填写2个角色(超级管理员和分公司管理员)。在web后台通过获取的角色控制权限。
二、具体方法
1.在service页面定义 两个角色:
/**
* 超级管理员
*/
public static final String PROVINCE_MANAGER_ROLE_CODE = "CJGLY";
/**
* 分公司管理员
*/
public static final String BRANCH_MANAGER_ROLE_CODE = "FGSGLY"
定义一个枚举类型:
public static enum PermissionType {
ProvinceAdmin(0), BranceAdmin(1), userLiable(2), Other(8);
private int value;
private PermissionType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
2.实现类(基本权限控制) (超级管理员admin的id 这里设置为 1)
(intValue()是java.lang.Number类的方法。有intValue方法,Double,Long等都有此方法。Number是一个抽象类。java中所有的数值类都继承它。其中Integer,Double,Long等都有此方法。此方法的意思是:输出int数据。
每个数值类中具体的实现是不同的。例如:
Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的。具体的用法你可以参考jdk的源码和API。)
PermissionType basePermissionType = PermissionType.Other;//设置默认权限类型
// 基础权限控制
User currentUser = //当前用户 ;
if (currentUser.getId().intValue() == 1) {//超级管理员
basePermissionType = PermissionType.ProvinceAdmin;
} else {
Set<Role> roles = currentUser.getRoles();//当前用户的角色
Iterator<Role> iterator = roles.iterator();
while (iterator.hasNext()) {
Role role = iterator.next();
if (service.PROVINCE_MANAGER_ROLE_CODE.equals(role.getRoleCode())) {//判断角色code为超级管理员
basePermissionType = PermissionType.ProvinceAdmin;//权限类型赋值
break;
}
if (service.BRANCH_MANAGER_ROLE_CODE.equals(role.getRoleCode())) {//判断角色code为分公司管理员
basePermissionType = PermissionType.BranceAdmin;//权限类型赋值
break;
}
}
}
if (basePermissionType == PermissionType.Other
&& ( //数据的负责人code.equals(currentUser.getCode()))) {
basePermissionType = PermissionType.userLiable;// 负责人
}
3.根据获取的basePermissionType控制权限角色