⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powerstrategytemplate.java

📁 Struts_Spring_Hibernate实现的基于RBAC的权限管理系统
💻 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 + -