📄 powerstrategytemplate.java
字号:
package com.xaccp.biz.service.power;
import java.util.*;
import com.xaccp.biz.po.*;
public abstract class PowerStrategyTemplate implements PowerStrategy {
public Map buildPower(Collection powers, User user) {
Map map = new HashMap();
//首先检测直接赋予用户的权限
for (Object obj : user.getTblUserPowers()) {
UserPower up = (UserPower)obj;
Power p = up.getTblPower();
//@TODO 因为删除权限的时候没有删除关系,所以要加下面这一行
if (p==null) continue;
String shortName = p.getShortName(); //权限代号
Integer state = up.getState(); //权限状态
processPower(map, shortName, state);
}
//然后检测通过角色获取的权限
Set roles = buildRoleSet(user);
for (Object role : roles) {
Set rpSet = ((Role)role).getTblRolePowers();
for (Object obj : rpSet) {
RolePower up = (RolePower)obj;
Power p = up.getTblPower();
//@TODO 因为删除权限的时候没有删除关系,所以要加下面这一行
if (p==null) continue;
String shortName = p.getShortName();
Integer state = up.getState();
processPower(map, shortName, state);
}
}
return map;
}
/**
* 构建用户拥有的角色集合
* 包含继承自父类的角色
* @param user
* @return
*/
private Set buildRoleSet(User user) {
Set roles = new HashSet();
for (Object userRole : user.getTblUserRoles()) {
addToRoleSet(roles, ((UserRole)userRole).getTblRole());
}
return roles;
}
private void addToRoleSet(Set roles, Role role) {
//如果已经存在当前角色,返回
if (roles.contains(role)) return;
//加入当前角色
roles.add(role);
System.out.println("尝试获取父类");
try {
//如果存在父类角色,处理父类角色
if (role.getTblRole()!=null) addToRoleSet(roles, role.getTblRole());
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 模版中的回调函数,负责判断该权限是否应该加入集合
* @param map
* @param shortName
* @param state
*/
protected abstract void processPower(Map map, String shortName, Integer state);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -