
org.tinygroup.bizframe.impl.AuthRelationCache Maven / Gradle / Ivy
/**
* 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 extends PermissionObject> 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;
}
}