/** * 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.Collection; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.ralasafe.entitle.CustomizedWhere; import org.ralasafe.entitle.Decision; import org.ralasafe.entitle.QueryResult; import org.ralasafe.privilege.Privilege; import org.ralasafe.privilege.UserRoleManager; import org.ralasafe.user.User; /** * Ralasafe Web Service. * * <p> * This class contains three major methods for web application. * <ol> * <li>User-Privilege relationship methods</li> * <li>User query related methods</li> * <li>User decision related methods</li> * </ol> * </p> * * @see Ralasafe */ public class WebRalasafe { /** * Store login user into HttpSession with this key */ private static final String USER_KEY = "_$user"; /** * Store deny reason into HttpServletRequest with this key */ private static final String DENY_REASON = "_$denyReason"; /** * Store fields into HttpServletRequest with this key */ private static final String FIELDS = "_$fields"; /** * Store readonly fields into HttpServletRequest with this key */ private static final String READ_ONLY_FIELDS = "_$readOnlyFields"; /** * Eval decision policy, return decision result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId privilegeId * @param businessObject business data * @return decision result. true--permit; false--deny, deny reasion be store in request with key DENY_REASON */ public static boolean permit(HttpServletRequest req, int privilegeId, Object businessObject) { return permit(req, privilegeId, businessObject, new HashMap()); } /** * Eval decision policy, return decision result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId privilegeId * @param businessObject business data * @param context context * @return decision result. true--permit; false--deny, deny reasion be store in request with key DENY_REASON */ public static boolean permit(HttpServletRequest req, int privilegeId, Object businessObject, Map context) { User user = (User) req.getSession().getAttribute(USER_KEY); Decision decision = Ralasafe.permit(privilegeId, user, businessObject, context); if (!decision.isPermit()) { req.setAttribute(DENY_REASON, decision.getDenyReason()); } return decision.isPermit(); } /** * Eval query policy, return query count. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId * @return query count */ public static int queryCount(HttpServletRequest req, int privilegeId) { return queryCount(req, privilegeId, new HashMap()); } /** * Eval query policy, return query count. * * @param req * @param privilegeId * @param where customized where condition * @return query count */ public static int queryCount(HttpServletRequest req, int privilegeId, CustomizedWhere where) { return queryCount(req, privilegeId, new HashMap(), where); } /** * Eval query policy, return query count. * * @param req * @param privilegeId * @param context * @return query count */ public static int queryCount(HttpServletRequest req, int privilegeId, Map context) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); return Ralasafe.queryCount(privilegeId, user, context); } /** * Eval query policy, return query count. * * @param req * @param privilegeId * @param context * @param where customized where condition * @return */ public static int queryCount(HttpServletRequest req, int privilegeId, Map context, CustomizedWhere where) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); return Ralasafe.queryCount(privilegeId, user, context, where); } /** * Eval query policy, return query result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId) { return query(req, privilegeId, new HashMap()); } /** * Eval query policy, return query result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId * @param where customized where condition * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, CustomizedWhere where) { return query(req, privilegeId, new HashMap(), where); } /** * Eval query policy, return query result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId * @param context context * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, Map context) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); QueryResult result = Ralasafe.query(privilegeId, user, context); req.setAttribute(FIELDS, result.getFields()); req.setAttribute(READ_ONLY_FIELDS, result.getReadOnlyFields()); return result.getData(); } /** * Eval query policy, return query result. * * @param req HttpRequest, the login user be read from HttpSession with key USER_KEY * @param privilegeId * @param context context * @param where customized where condition * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, Map context, CustomizedWhere where) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); QueryResult result = Ralasafe.query(privilegeId, user, context, where); req.setAttribute(FIELDS, result.getFields()); req.setAttribute(READ_ONLY_FIELDS, result.getReadOnlyFields()); return result.getData(); } /** * Eval query policy, return query result pagination. * * @param req * @param privilegeId * @param first first index, count from 0,1,2... * @param max max returned records * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, int first, int max) { Collection query = query(req, privilegeId, new HashMap(), first, max); return query; } /** * Eval query policy, return query result pagination. * * @param req * @param privilegeId * @param where customized where condtion * @param first first index, count from 0,1,2... * @param max max returned records * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, CustomizedWhere where, int first, int max) { return query(req, privilegeId, new HashMap(), where, first, max); } /** * Eval query policy, return query result pagination. * * @param req * @param privilegeId * @param context * @param first first index, count from 0,1,2... * @param max max returned records * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, Map context, int first, int max) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); QueryResult result = Ralasafe.query(privilegeId, user, context, first, max); req.setAttribute(FIELDS, result.getFields()); req.setAttribute(READ_ONLY_FIELDS, result.getReadOnlyFields()); return result.getData(); } /** * Eval query policy, return query result pagination. * * @param req * @param privilegeId * @param context * @param where customized where condition * @param first first index, count from 0,1,2... * @param max max returned records * @return query result, collection of yourbean */ public static Collection query(HttpServletRequest req, int privilegeId, Map context, CustomizedWhere where, int first, int max) { User user = (User) req.getSession().getAttribute(USER_KEY); // String name = WebUtil.getCurrentApplication(req).getName(); QueryResult result = Ralasafe.query(privilegeId, user, context, where, first, max); req.setAttribute(FIELDS, result.getFields()); req.setAttribute(READ_ONLY_FIELDS, result.getReadOnlyFields()); return result.getData(); } /** * Does this user be granted for the privilege? * * @param req * @param privilegeId * @return true--be granted; false--not be granted */ public static boolean hasPrivilege(HttpServletRequest req, int privilegeId) { User user = (User) req.getSession().getAttribute(USER_KEY); if (user == null) { return false; } return Ralasafe.hasPrivilege(privilegeId, user); } /** * Set current login user into httpsession with key <code>USER_KEY</code> * * @param req * @param user the login user */ public static void setCurrentUser(HttpServletRequest req, User user) { req.getSession().setAttribute(USER_KEY, user); } /** * Get current login user from httpsession. * * @param req * @return current login user */ public static User getCurrentUser(HttpServletRequest req) { return (User) req.getSession().getAttribute(USER_KEY); } /** * Get current operation deny reason. * * @param req * @return deny reason */ public static String getDenyReason(HttpServletRequest req) { return (String) req.getAttribute(DENY_REASON); } /** * Get query result's fields info. * * @param req * @return Collection< String > field names of your bean class */ public static Collection getFields(HttpServletRequest req) { return (Collection) req.getAttribute(FIELDS); } /** * Get query result's readonly fields info. * * @param req * @return Collection< String > readonly field names of your bean class */ public static Collection getReadOnlyFields(HttpServletRequest req) { return (Collection) req.getAttribute(READ_ONLY_FIELDS); } /** * Get the user's privilege tree, often for display operate menu. * @param req * @return privilege tree(menu tree) */ public static Privilege getBusinessPrivilegeTree(HttpServletRequest req) { User user=getCurrentUser( req ); return Ralasafe.getBusinessPrivilegeTree( user ); } }