/*
* Copyright 2005-2008 the original author or authors.
*
* 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 org.openuap.cms.node.security;
import org.openuap.cms.CmsPlugin;
import org.openuap.cms.node.manager.NodeManager;
import org.openuap.cms.node.model.Node;
import org.openuap.cms.user.manager.IPermissionManager;
import org.openuap.cms.user.security.IUserSession;
import org.openuap.cms.user.security.SecurityUtil;
import org.openuap.runtime.util.ObjectLocator;
/**
* <p>
* 基于结点的权限判断帮助类
* </p>
*
* <p>
* $Id: NodeSecurityUtil.java 3964 2010-12-09 15:23:48Z orangeforjava $
* </p>
*
* @author Joseph
* @version 1.0
*/
public class NodeSecurityUtil {
private static IPermissionManager permissionManager = null;
private static NodeManager nodeManager = null;
/**
* 判断用户是否具有指定的权限 不同之处在于按照站点之间的继承关系计算 类似于论坛的总斑竹,斑竹,副斑竹管理关系具有级别关系
*
* @param nodeId
* 结点Id
* @param objType
* 对象类型标识
* @param userId
* 用户id
* @param permission
* 权限
* @return
*/
public static boolean hasPermission(Long nodeId, String objType,
long permission) {
IUserSession userSession = SecurityUtil.getUserSession();
String uid = userSession.getUserID();
Long userId = Long.parseLong(uid);
if (userSession.isAdmin()) {
// 管理员全部授权
return true;
}
if (nodeId.equals(0L)) {
return SecurityUtil.hasPermission(objType, "0", permission);
}
boolean rs = getPermissionManager().hasPermission(userId, objType,
nodeId.toString(), permission);
if (!rs) {
Node node = getNodeManager().getNode(nodeId);
if (node != null) {
long pid = node.getParentId();
if (pid != 0L) {
return hasPermission(pid, objType, permission);
}
}
}
return rs;
}
public static boolean hasPermission(String objType, String nodeId,
long permission) {
Long nid = new Long(nodeId);
return hasPermission(nid, objType, permission);
}
public static IPermissionManager getPermissionManager() {
if (permissionManager == null) {
permissionManager = (IPermissionManager) ObjectLocator.lookup(
"permissionManager", CmsPlugin.PLUGIN_ID);
}
return permissionManager;
}
public static NodeManager getNodeManager() {
if (nodeManager == null) {
nodeManager = (NodeManager) ObjectLocator.lookup("nodeManager",
CmsPlugin.PLUGIN_ID);
}
return nodeManager;
}
}