1 46 47 package org.mr.kernel.security.authorization; 48 49 import org.mr.kernel.security.SecurityConstants; 50 import org.mr.kernel.security.MantaSecurityException; 51 import org.mr.kernel.security.SecurityActionTypes; 52 import org.apache.commons.logging.Log; 53 import org.apache.commons.logging.LogFactory; 54 import org.mr.kernel.security.authorization.permissions.MantaPermissionWithParameter; 55 import org.mr.kernel.security.authorization.permissions.MantaPermission; 56 57 import java.util.*; 58 import java.lang.reflect.Constructor ; 59 60 71 public class PermissionFactory implements SecurityActionTypes, SecurityConstants { 72 private static PermissionFactory _instance; 73 private static Map _names = new HashMap(); 74 private Log _logger; 75 76 81 public static PermissionFactory getInstance() { 82 if (_instance == null){ 83 synchronized(PermissionFactory.class){ 84 if (_instance == null) 85 _instance = new PermissionFactory(); 86 } 87 } 88 return _instance; 89 } 90 91 private PermissionFactory(){ 92 _names.put(PERMISSION_CREATE_BROWSER_FOR_QUEUE, PERMISSION_WITHOUT_PARAMETER); 94 _names.put(PERMISSION_CREATE_BROWSER_FOR_SPECIFIC_QUEUE, SPECIFIC_QUEUE_PERMISSION); 95 _names.put(PERMISSION_CREATE_CONSUMER_FOR_QUEUE, PERMISSION_WITHOUT_PARAMETER); 96 _names.put(PERMISSION_CREATE_CONSUMER_FOR_SPECIFIC_QUEUE, SPECIFIC_QUEUE_PERMISSION); 97 _names.put(PERMISSION_CREATE_CONSUMER_FOR_TOPIC, PERMISSION_WITHOUT_PARAMETER); 98 _names.put(PERMISSION_CREATE_CONSUMER_FOR_SPECIFIC_TOPIC, SPECIFIC_TOPIC_PERMISSION); 99 _names.put(PERMISSION_CREATE_PRODUCER_FOR_QUEUE, PERMISSION_WITHOUT_PARAMETER); 100 _names.put(PERMISSION_CREATE_PRODUCER_FOR_SPECIFIC_QUEUE, SPECIFIC_QUEUE_PERMISSION); 101 _names.put(PERMISSION_CREATE_PRODUCER_FOR_TOPIC, PERMISSION_WITHOUT_PARAMETER); 102 _names.put(PERMISSION_CREATE_PRODUCER_FOR_SPECIFIC_TOPIC, SPECIFIC_TOPIC_PERMISSION); 103 _names.put(PERMISSION_SUBSCRIBE_DURABLE_ON_TOPIC, PERMISSION_WITHOUT_PARAMETER); 104 _names.put(PERMISSION_SUBSCRIBE_DURABLE_ON_SPECIFIC_TOPIC, SPECIFIC_TOPIC_PERMISSION); 105 106 _names.put(PERMISSION_CREATE_GROUP, PERMISSION_WITHOUT_PARAMETER); 108 _names.put(PERMISSION_MODIFY_GROUP, PERMISSION_WITHOUT_PARAMETER); 109 _names.put(PERMISSION_MODIFY_SPECIFIC_GROUP, SPECIFIC_GROUP_PERMISSION); 110 _names.put(PERMISSION_DELETE_GROUP, PERMISSION_WITHOUT_PARAMETER); 111 _names.put(PERMISSION_DELETE_SPECIFIC_GROUP, SPECIFIC_GROUP_PERMISSION); 112 _names.put(PERMISSION_SET_PERMISSIONS_FOR_GROUP, PERMISSION_WITHOUT_PARAMETER); 113 _names.put(PERMISSION_SET_PERMISSIONS_FOR_SPECIFIC_GROUP, SPECIFIC_GROUP_PERMISSION); 114 _names.put(PERMISSION_READ_PERMISSIONS_FOR_GROUP, PERMISSION_WITHOUT_PARAMETER); 115 _names.put(PERMISSION_READ_PERMISSIONS_FOR_SPECIFIC_GROUP, SPECIFIC_GROUP_PERMISSION); 116 _names.put(PERMISSION_CREATE_USER, PERMISSION_WITHOUT_PARAMETER); 117 _names.put(PERMISSION_CREATE_USER_IN_SPECIFIC_GROUP, SPECIFIC_GROUP_PERMISSION); 118 _names.put(PERMISSION_MODIFY_USER, PERMISSION_WITHOUT_PARAMETER); 119 _names.put(PERMISSION_MODIFY_SPECIFIC_USER, SPECIFIC_USER_PERMISSION); 120 _names.put(PERMISSION_DELETE_USER, PERMISSION_WITHOUT_PARAMETER); 121 _names.put(PERMISSION_DELETE_SPECIFIC_USER, SPECIFIC_USER_PERMISSION); 122 _names.put(PERMISSION_SET_PERMISSIONS_FOR_USER, PERMISSION_WITHOUT_PARAMETER); 123 _names.put(PERMISSION_SET_PERMISSIONS_FOR_SPECIFIC_USER, SPECIFIC_USER_PERMISSION); 124 _names.put(PERMISSION_READ_PERMISSIONS_FOR_USER, PERMISSION_WITHOUT_PARAMETER); 125 _names.put(PERMISSION_READ_PERMISSIONS_FOR_SPECIFIC_USER, SPECIFIC_USER_PERMISSION); 126 _names.put(PERMISSION_CREATE_WHITE_LIST_ENTRY, PERMISSION_WITHOUT_PARAMETER); 127 _names.put(PERMISSION_DELETE_WHITE_LIST_ENTRY, PERMISSION_WITHOUT_PARAMETER); 128 _names.put(PERMISSION_READ_ANY, PERMISSION_WITHOUT_PARAMETER); 129 _names.put(PERMISSION_ALL, PERMISSION_WITHOUT_PARAMETER); 130 } 131 132 138 public List getAvailablePermissions(){ 139 List availablePermissions = new ArrayList(); 140 Set names = _names.keySet(); 141 Iterator iter = names.iterator(); 142 while (iter.hasNext()){ 143 availablePermissions.add(iter.next()); 144 } 145 return availablePermissions; 146 } 147 148 156 public MantaPermission getPermission(String permissionName) throws MantaSecurityException { 157 return getPermission(permissionName, null); 158 } 159 160 171 public MantaPermission getPermission(String permissionName, Object param) throws MantaSecurityException { 172 MantaPermission p; 173 174 if (!_names.containsKey(permissionName)){ 175 if (getLogger().isErrorEnabled()) 176 getLogger().error("[getPermission] No MantaPermission class found with name " + permissionName); 177 throw new MantaSecurityException("No MantaPermission class found with name " + permissionName); 178 } 179 180 try { 181 String permissionsClassName = (String ) _names.get(permissionName); 182 Class [] parameters = {String .class}; 183 Constructor constructor = Class.forName(permissionsClassName).getConstructor(parameters); 184 String [] args = {permissionName}; 185 p = (MantaPermission) constructor.newInstance(args); 186 if (p instanceof MantaPermissionWithParameter){ 187 MantaPermissionWithParameter permissionsWithParam = (MantaPermissionWithParameter) p; 188 permissionsWithParam.setParameter(param); 189 p = permissionsWithParam; 190 } 191 if (getLogger().isDebugEnabled()) 192 getLogger().debug("[getPermission] Class " + permissionsClassName + " was instantiated"); 193 194 } 195 catch (Exception e){ 196 if (getLogger().isErrorEnabled()) 197 getLogger().error("[getPermission] Error instantiating MantaPermission class. " + e.getMessage()); 198 throw new MantaSecurityException("Error instantiating MantaPermission class. " + e.getMessage()); 199 } 200 return p; 201 } 202 203 208 public Log getLogger(){ 209 if (_logger == null){ 210 _logger = LogFactory.getLog(getClass().getName()); 211 } 212 return _logger; 213 } 214 } 215 | Popular Tags |