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

org.tinygroup.bizframe.impl.AuthRelationCache Maven / Gradle / Ivy

The newest version!
/**
 *  Copyright (c) 1997-2013, tinygroup.org ([email protected]).
 *
 *  Licensed under the GPL, Version 3.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.gnu.org/licenses/gpl.html
 *
 *  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.
 * --------------------------------------------------------------------------
 *  版权 (c) 1997-2013, tinygroup.org ([email protected]).
 *
 *  本开源软件遵循 GPL 3.0 协议;
 *  如果您不遵循此协议,则不被允许使用此文件。
 *  你可以从下面的地址获取完整的协议文本
 *
 *       http://www.gnu.org/licenses/gpl.html
 */
package org.tinygroup.bizframe.impl;

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

import org.tinygroup.bizframe.PermissionObject;
import org.tinygroup.bizframe.PermissionSubject;
import org.tinygroup.tinydb.Bean;

/**
 * 
 * 功能说明:权限关联表记录缓存
 * 

* 开发人员: renhui
* 开发时间: 2013-9-26
*
*/ public class AuthRelationCache> { /** * 权限主体缓存 key:sub_type+"-"+sub_id */ private Map> permissionSubjectMap = new HashMap>(); /** * 权限客体缓存 key:ob_type+"-"+ob_id */ private Map> permissionObjectMap = new HashMap>(); /** * 允许关联关系表 key:sub_type+"-"+sub_id+"-"+ob_type+"-"+ob_id */ private Map allowRelationMap = new HashMap(); /** * 权限主体对应的所有权限客体信息 key:sub_type+"-"+sub_id */ private Map>> subject2Objects=new HashMap>>(); /** * 阻止关联关系表 key:sub_type+"-"+sub_id+"-"+ob_type+"-"+ob_id */ private Map blockRelationMap = new HashMap(); public void addPermissionSubject(PermissionSubject permissionSubject) { String key = getKey(permissionSubject.getType(), permissionSubject.getId()); if (!permissionSubjectMap.containsKey(key)) { permissionSubjectMap.put(key, permissionSubject); } } public PermissionSubject getPermissionSubject(String sub_type, K sub_id) { String key = getKey(sub_type, sub_id); return permissionSubjectMap.get(key); } public void removePermissionSubject( PermissionSubject permissionSubject) { permissionSubjectMap.remove(getKey(permissionSubject.getType(), permissionSubject.getId())); } public void addPermissionObject(PermissionObject permissionObject) { String key = getKey(permissionObject.getType(), permissionObject.getId()); if (!permissionSubjectMap.containsKey(key)) { permissionObjectMap.put(key, permissionObject); } } public PermissionObject getPermissionObject(String ob_type, K ob_id) { String key = getKey(ob_type, ob_id); return permissionObjectMap.get(key); } public void removePermissionObject(PermissionObject permissionObject) { permissionObjectMap.remove(getKey(permissionObject.getType(), permissionObject.getId())); } public void addAuthRelation(String status, String permissionSubjectType, K permissionSubjectId, String permissionObjectType, K permissionObjectId, Bean bean) { String key = getKey(permissionSubjectType, permissionSubjectId, permissionObjectType, permissionObjectId); if (status.equals(DbModelPermissionManager.ALLOW)) { allowRelationMap.put(key, bean); } else { blockRelationMap.put(key, bean); } String subjectKey=getKey(permissionSubjectType, permissionSubjectId); List> permissionObjects=subject2Objects.get(subjectKey); if(permissionObjects==null){ permissionObjects=new ArrayList>(); subject2Objects.put(subjectKey, permissionObjects); } PermissionObject permissionObject=permissionObjectMap.get(getKey(permissionObjectType, permissionObjectId)); if(permissionObject!=null&&!permissionObjects.contains(permissionObject)){ permissionObjects.add(permissionObject); } } public void removeAuthRelation(String status, String permissionSubjectType, K permissionSubjectId, String permissionObjectType, K permissionObjectId) { String key = getKey(permissionSubjectType, permissionSubjectId, permissionObjectType, permissionObjectId); if (status.equals(DbModelPermissionManager.ALLOW)) { allowRelationMap.remove(key); } else { blockRelationMap.remove(key); } } public Bean getAuthRelation(String status, String permissionSubjectType, K permissionSubjectId, String permissionObjectType, K permissionObjectId) { String key = getKey(permissionSubjectType, permissionSubjectId, permissionObjectType, permissionObjectId); if (status.equals(DbModelPermissionManager.ALLOW)) { return allowRelationMap.get(key); } else { return blockRelationMap.get(key); } } @SuppressWarnings("rawtypes") public List> getPermissionObjectsWithSujectKey(String subjectBeanType, String objectBeanType, K permissionSubjectId, Class objectClassType){ String subjectKey=getKey(subjectBeanType, permissionSubjectId); List> permissionObjects=subject2Objects.get(subjectKey); List> classPermissionObjects=null; if(permissionObjects!=null&&permissionObjects.size()>0){ classPermissionObjects=new ArrayList>(); for (PermissionObject permissionObject : permissionObjects) { if(permissionObject.getType().equals(objectBeanType)&&objectClassType.isInstance(permissionObject)){ classPermissionObjects.add(permissionObject); } } } return permissionObjects; } private String getKey(String type, K id) { return type + "-" + id; } private String getKey(String sub_type, K sub_id, String ob_type, K ob_id) { return sub_type + "-" + sub_id + "-" + ob_type + "-" + ob_id; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy