/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.ralasafe.SystemConstant;
import org.ralasafe.entitle.CustomizedWhere;
import org.ralasafe.entitle.Decision;
import org.ralasafe.entitle.EntitleManager;
import org.ralasafe.entitle.QueryResult;
import org.ralasafe.privilege.Privilege;
import org.ralasafe.privilege.UserRoleManager;
import org.ralasafe.user.User;
/**
* Ralasafe Service.
*
* <p>
* This class contains three major methods for application.
* <ol>
* <li>User-Privilege relationship methods</li>
* <li>User query related methods</li>
* <li>User decision related methods</li>
* </ol>
* </p>
*
* <p>
* In ralasafe Philosophy, ACL is divided into:
* <ol>
* <li>Function level ACL</li>
* <li>Data leve ACL
* <ol>
* <li>User queries data from system</li>
* <li>User operte data to system</li>
* </ol>
* </li>
* </ol>
* </p>
*/
public class Ralasafe {
private static final String appName = "ralasafe";
/**
* Eval query policy, return query result.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @param where customeized where conditions
* @return query result
*/
public static QueryResult query(int privilegeId, User user, Map context,
CustomizedWhere where) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.query(privilegeId, user, context, where);
}
/**
* Eval query policy, return query result.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @return query result
*/
public static QueryResult query(int privilegeId, User user, Map context) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.query(privilegeId, user, context);
}
/**
* Eval query policy, return query result pagination.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @param where customized where condition
* @param first first index, count from 0,1,2...
* @param max max records
* @return query result
*/
public static QueryResult query(int privilegeId, User user, Map context,
CustomizedWhere where, int first, int max) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.query(privilegeId, user, context, where, first,
max);
}
/**
* Eval query policy, return query result pagination.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @param first first index, count from 0,1,2...
* @param max max returned records
* @return query result
*/
public static QueryResult query(int privilegeId, User user, Map context,
int first, int max) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.query(privilegeId, user, context, first, max);
}
/**
* Eval query policy, return result count.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @param where customized where condition
* @return result count
*/
public static int queryCount(int privilegeId, User user, Map context,
CustomizedWhere where) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.queryCount(privilegeId, user, context, where);
}
/**
* Eval query policy, return result count.
*
* @param privilegeId privilegeId
* @param user who queries for data
* @param context context
* @return result count
*/
public static int queryCount(int privilegeId, User user, Map context) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
return entitleManager.queryCount(privilegeId, user, context);
}
/**
* Eval decision policy, return decision result.
*
* @param privilegeId privilegeId
* @param user who requests for this operation
* @param businessData the business data
* @param context context
* @return decision result
*/
public static Decision permit(int privilegeId, User user,
Object businessData, Map context) {
if (context == null) {
context = new HashMap();
}
EntitleManager entitleManager = Factory.getEntitleManager(appName);
context.put(SystemConstant.BUSINESS_DATA, businessData);
return entitleManager.permit(Locale.US, privilegeId, user, context);
}
/**
* Does this user be granted for the privilege?
*
* @param privilegeId privilege
* @param user who
* @return true--be granted; false--not be granted
*/
public static boolean hasPrivilege(int privilegeId, User user) {
UserRoleManager userRoleMng = Factory.getUserRoleManager(appName,
"ralasafe");
Object userId=null;
if( user!=null ) {
userId=user.get(User.idFieldName);
}
return userRoleMng.hasPrivilege(userId, privilegeId);
}
/**
* Get the user's privilege tree, often for display operate menu.
* @param user who
* @return privilege tree(menu tree)
*/
public static Privilege getBusinessPrivilegeTree(User user) {
UserRoleManager userRoleMng = Factory.getUserRoleManager(appName, "ralasafe");
Object userId=user.get(User.idFieldName);
return userRoleMng.getBusinessPrivilegeTree( userId );
}
}