?? powerstrategytemplate.java
字號(hào):
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();
//首先檢測直接賦予用戶的權(quán)限
for (Object obj : user.getTblUserPowers()) {
UserPower up = (UserPower)obj;
Power p = up.getTblPower();
//@TODO 因?yàn)閯h除權(quán)限的時(shí)候沒有刪除關(guān)系,所以要加下面這一行
if (p==null) continue;
String shortName = p.getShortName(); //權(quán)限代號(hào)
Integer state = up.getState(); //權(quán)限狀態(tài)
processPower(map, shortName, state);
}
//然后檢測通過角色獲取的權(quán)限
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 因?yàn)閯h除權(quán)限的時(shí)候沒有刪除關(guān)系,所以要加下面這一行
if (p==null) continue;
String shortName = p.getShortName();
Integer state = up.getState();
processPower(map, shortName, state);
}
}
return map;
}
/**
* 構(gòu)建用戶擁有的角色集合
* 包含繼承自父類的角色
* @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) {
//如果已經(jīng)存在當(dāng)前角色,返回
if (roles.contains(role)) return;
//加入當(dāng)前角色
roles.add(role);
System.out.println("嘗試獲取父類");
try {
//如果存在父類角色,處理父類角色
if (role.getTblRole()!=null) addToRoleSet(roles, role.getTblRole());
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 模版中的回調(diào)函數(shù),負(fù)責(zé)判斷該權(quán)限是否應(yīng)該加入集合
* @param map
* @param shortName
* @param state
*/
protected abstract void processPower(Map map, String shortName, Integer state);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -