|
@@ -10,32 +10,28 @@ import org.springframework.util.Assert;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Default implementation of {@link PermissionFactory}.
|
|
* Default implementation of {@link PermissionFactory}.
|
|
- *
|
|
|
|
* <p>
|
|
* <p>
|
|
* Generally this class will be used by a {@link Permission} instance, as opposed to being dependency
|
|
* Generally this class will be used by a {@link Permission} instance, as opposed to being dependency
|
|
* injected into a {@link LookupStrategy} or similar. Nevertheless, the latter mode of operation is
|
|
* injected into a {@link LookupStrategy} or similar. Nevertheless, the latter mode of operation is
|
|
* fully supported (in which case your {@link Permission} implementations probably should extend
|
|
* fully supported (in which case your {@link Permission} implementations probably should extend
|
|
* {@link AbstractPermission} instead of {@link AbstractRegisteredPermission}).
|
|
* {@link AbstractPermission} instead of {@link AbstractRegisteredPermission}).
|
|
- * </p>
|
|
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @author Ben Alex
|
|
* @author Ben Alex
|
|
* @since 2.0.3
|
|
* @since 2.0.3
|
|
- *
|
|
|
|
*/
|
|
*/
|
|
public class DefaultPermissionFactory implements PermissionFactory {
|
|
public class DefaultPermissionFactory implements PermissionFactory {
|
|
- private Map registeredPermissionsByInteger = new HashMap();
|
|
|
|
- private Map registeredPermissionsByName = new HashMap();
|
|
|
|
|
|
+ private final Map<Integer, Permission> registeredPermissionsByInteger = new HashMap<Integer, Permission>();
|
|
|
|
+ private final Map<String, Permission> registeredPermissionsByName = new HashMap<String, Permission>();
|
|
|
|
|
|
/**
|
|
/**
|
|
* Permit registration of a {@link DefaultPermissionFactory} class. The class must provide
|
|
* Permit registration of a {@link DefaultPermissionFactory} class. The class must provide
|
|
* public static fields of type {@link Permission} to represent the possible permissions.
|
|
* public static fields of type {@link Permission} to represent the possible permissions.
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param clazz a {@link Permission} class with public static fields to register
|
|
* @param clazz a {@link Permission} class with public static fields to register
|
|
*/
|
|
*/
|
|
- public void registerPublicPermissions(Class clazz) {
|
|
|
|
|
|
+ public void registerPublicPermissions(Class<? extends Permission> clazz) {
|
|
Assert.notNull(clazz, "Class required");
|
|
Assert.notNull(clazz, "Class required");
|
|
- Assert.isAssignable(Permission.class, clazz);
|
|
|
|
-
|
|
|
|
|
|
+
|
|
Field[] fields = clazz.getFields();
|
|
Field[] fields = clazz.getFields();
|
|
|
|
|
|
for (int i = 0; i < fields.length; i++) {
|
|
for (int i = 0; i < fields.length; i++) {
|
|
@@ -46,7 +42,7 @@ public class DefaultPermissionFactory implements PermissionFactory {
|
|
// Found a Permission static field
|
|
// Found a Permission static field
|
|
Permission perm = (Permission) fieldValue;
|
|
Permission perm = (Permission) fieldValue;
|
|
String permissionName = fields[i].getName();
|
|
String permissionName = fields[i].getName();
|
|
-
|
|
|
|
|
|
+
|
|
registerPermission(perm, permissionName);
|
|
registerPermission(perm, permissionName);
|
|
}
|
|
}
|
|
} catch (Exception ignore) {}
|
|
} catch (Exception ignore) {}
|
|
@@ -56,18 +52,18 @@ public class DefaultPermissionFactory implements PermissionFactory {
|
|
public void registerPermission(Permission perm, String permissionName) {
|
|
public void registerPermission(Permission perm, String permissionName) {
|
|
Assert.notNull(perm, "Permission required");
|
|
Assert.notNull(perm, "Permission required");
|
|
Assert.hasText(permissionName, "Permission name required");
|
|
Assert.hasText(permissionName, "Permission name required");
|
|
-
|
|
|
|
|
|
+
|
|
Integer mask = new Integer(perm.getMask());
|
|
Integer mask = new Integer(perm.getMask());
|
|
|
|
|
|
// Ensure no existing Permission uses this integer or code
|
|
// Ensure no existing Permission uses this integer or code
|
|
Assert.isTrue(!registeredPermissionsByInteger.containsKey(mask), "An existing Permission already provides mask " + mask);
|
|
Assert.isTrue(!registeredPermissionsByInteger.containsKey(mask), "An existing Permission already provides mask " + mask);
|
|
Assert.isTrue(!registeredPermissionsByName.containsKey(permissionName), "An existing Permission already provides name '" + permissionName + "'");
|
|
Assert.isTrue(!registeredPermissionsByName.containsKey(permissionName), "An existing Permission already provides name '" + permissionName + "'");
|
|
-
|
|
|
|
|
|
+
|
|
// Register the new Permission
|
|
// Register the new Permission
|
|
registeredPermissionsByInteger.put(mask, perm);
|
|
registeredPermissionsByInteger.put(mask, perm);
|
|
registeredPermissionsByName.put(permissionName, perm);
|
|
registeredPermissionsByName.put(permissionName, perm);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public Permission buildFromMask(int mask) {
|
|
public Permission buildFromMask(int mask) {
|
|
if (registeredPermissionsByInteger.containsKey(new Integer(mask))) {
|
|
if (registeredPermissionsByInteger.containsKey(new Integer(mask))) {
|
|
// The requested mask has an exactly match against a statically-defined Permission, so return it
|
|
// The requested mask has an exactly match against a statically-defined Permission, so return it
|
|
@@ -123,5 +119,5 @@ public class DefaultPermissionFactory implements PermissionFactory {
|
|
|
|
|
|
return permissions;
|
|
return permissions;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|