All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.generallycloud.baseio.container.authority.RoleManager Maven / Gradle / Ivy

There is a newer version: 3.2.9-BETA-2
Show newest version
/*
 * Copyright 2015-2017 GenerallyCloud.com
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 
package com.generallycloud.baseio.container.authority;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.generallycloud.baseio.container.ApplicationContext;
import com.generallycloud.baseio.container.AbstractInitializeable;
import com.generallycloud.baseio.container.configuration.ApplicationConfiguration;
import com.generallycloud.baseio.container.configuration.Configuration;
import com.generallycloud.baseio.container.configuration.PermissionConfiguration;

public class RoleManager extends AbstractInitializeable {

	private Map	authorityManagers		= new HashMap();

	private AuthorityManager				guestAuthorityManager	;

	@Override
	public void initialize(ApplicationContext context, Configuration config) throws Exception {

		ApplicationConfiguration configuration = context.getConfiguration();

		PermissionConfiguration permissionConfiguration = configuration.getPermissionConfiguration();

		List permissionConfigurations = permissionConfiguration.getPermissions();

		List roleConfigurations = permissionConfiguration.getRoles();

		if (permissionConfigurations == null || permissionConfigurations.size() == 0 || roleConfigurations == null
				|| roleConfigurations.size() == 0) {
			throw new Error("没有加载到角色配置");
		}

		Map permissions = new HashMap();

		for (Configuration c : permissionConfigurations) {

			Permission p = new Permission();
			p.setDescription(c.getParameter("description"));
			p.setFrequency(c.getIntegerParameter("frequency"));
			p.setPermissionAPI(c.getParameter("permissionAPI"));
			p.setPermissionID(c.getIntegerParameter("permissionID"));

			permissions.put(p.getPermissionID(), p);
		}

		Map roles = new HashMap();
		List roleList = new ArrayList();

		for (Configuration c : roleConfigurations) {

			Role r = new Role();
			r.setDescription(c.getParameter("description"));
			r.setRoleID(c.getIntegerParameter("roleID"));
			r.setRoleName(c.getParameter("roleName"));

			JSONArray array = c.getJSONArray("children");

			if (array != null && !array.isEmpty()) {

				List _children = new ArrayList();

				for (int i = 0; i < array.size(); i++) {

					_children.add(array.getInteger(i));
				}

				r.setChildren(_children);
			}

			array = c.getJSONArray("permissions");

			if (array != null && !array.isEmpty()) {

				List _permissions = new ArrayList();

				for (int i = 0; i < array.size(); i++) {

					_permissions.add(array.getInteger(i));
				}

				r.setPermissions(_permissions);
			}

			roles.put(r.getRoleID(), r);
			roleList.add(r);
		}

		reflectPermission(roleList, roles, permissions);
	}

	private void reflectPermission(List roleList, Map roles, Map permissions) {

		for (Role r : roleList) {

			AuthorityManager authorityManager = new AuthorityManager();

			authorityManager.setRoleID(r.getRoleID());

			reflectPermission(r, roles, permissions, authorityManager);

			authorityManagers.put(authorityManager.getRoleID(), authorityManager);
		}
		
		guestAuthorityManager = new AuthorityManager();
		
		guestAuthorityManager.setRoleID(Authority.GUEST.getRoleID());
		
		authorityManagers.put(guestAuthorityManager.getRoleID(), guestAuthorityManager);
		
	}

	private void reflectPermission(Role role, Map roles, Map permissions,
			AuthorityManager authorityManager) {

		List children = role.getChildren();

		if (children != null) {
			for (Integer rID : children) {

				Role r = roles.get(rID);

				if (r != null) {
					reflectPermission(r, roles, permissions, authorityManager);
				}
			}
		}

		List _permissions = role.getPermissions();

		if (_permissions != null) {

			for (Integer pID : _permissions) {

				Permission p = permissions.get(pID);

				if (p != null) {
					authorityManager.addPermission(p);
				}
			}
		}
	}

	public AuthorityManager getAuthorityManager(Authority authority) {
		
		Integer roleID = authority.getRoleID();
		
		AuthorityManager authorityManager = authorityManagers.get(roleID);

		if (authorityManager == null) {
			authorityManager = guestAuthorityManager;
		}

		authorityManager = authorityManager.clone();
		
		authorityManager.setAuthority(authority);
		
		return authorityManager;
	}

	public static void main(String[] args) {

		System.out.println("[");
		for (int j = 0; j < 100; j++) {

			System.out.println("\t{");
			System.out.println("\t\t\"permissionID\": " + j + ",");
			System.out.println("\t\t\"permissionAPI\": \"\"");
			System.out.println("\t},");
		}
		System.out.println("]");

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy