NIHVIVO-3523 Re-write Permission as an abstract class rather than an interface. Make it Comparable. Remove the unused methods for getLocalName() and getNamespace()

This commit is contained in:
j2blake 2011-12-22 19:39:23 +00:00
parent 45e8d0c654
commit 9d55acb2f3
3 changed files with 52 additions and 72 deletions

View file

@ -8,38 +8,9 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct
* This is what the PermissionRegistry hands out if you ask for a Permission * This is what the PermissionRegistry hands out if you ask for a Permission
* that it doesn't know about. Nothing is authorized by this Permission. * that it doesn't know about. Nothing is authorized by this Permission.
*/ */
public class BrokenPermission implements Permission { public class BrokenPermission extends Permission {
private final String uri;
private final String localName;
private final String namespace;
public BrokenPermission(String uri) { public BrokenPermission(String uri) {
this.uri = uri; super(uri);
int namespaceBreak = uri.lastIndexOf("#");
if (namespaceBreak == -1) {
namespaceBreak = uri.lastIndexOf("/");
}
int localNameStart = namespaceBreak + 1;
this.namespace = uri.substring(0, localNameStart);
this.localName = uri.substring(localNameStart);
}
@Override
public String getUri() {
return uri;
}
@Override
public String getLocalName() {
return localName;
}
@Override
public String getNamespace() {
return namespace;
} }
@Override @Override

View file

@ -8,47 +8,64 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct
* Interface that describes a unit of authorization, or permission to perform * Interface that describes a unit of authorization, or permission to perform
* requested actions. * requested actions.
*/ */
public interface Permission { public abstract class Permission implements Comparable<Permission> {
protected final String uri;
protected Permission(String uri) {
if (uri == null) {
throw new NullPointerException("uri may not be null.");
}
this.uri = uri;
}
/** /**
* Get the URI that identifies this Permission object. * Get the URI that identifies this Permission object.
*/ */
String getUri(); public String getUri() {
return uri;
/** }
* Convenience method to get the localName portion of the URI.
*/
String getLocalName();
/**
* Convenience method to get the namespace portion of the URI.
*/
String getNamespace();
/** /**
* Is a user with this Permission authorized to perform this * Is a user with this Permission authorized to perform this
* RequestedAction? * RequestedAction?
*/ */
boolean isAuthorized(RequestedAction whatToAuth); public abstract boolean isAuthorized(RequestedAction whatToAuth);
@Override
public int compareTo(Permission that) {
return this.uri.compareTo(that.uri);
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null) {
return false;
}
if (!obj.getClass().equals(this.getClass())) {
return false;
}
Permission that = (Permission) obj;
return this.uri.equals(that.uri);
}
@Override
public int hashCode() {
return uri.hashCode();
}
@Override
public String toString() {
return this.getClass().getSimpleName() + "['" + uri + "']";
}
/** /**
* An implementation of Permission that authorizes nothing. * A concrete Permission instance that authorizes nothing.
*/ */
static Permission NOT_AUTHORIZED = new Permission() { static Permission NOT_AUTHORIZED = new Permission("java:"
+ Permission.class.getName() + "#NOT_AUTHORIZED") {
@Override
public String getUri() {
return "java:" + Permission.class.getName() + "#NOT_AUTHORIZED";
}
@Override
public String getLocalName() {
return "NOT_AUTHORIZED";
}
@Override
public String getNamespace() {
return "java:" + Permission.class.getName();
}
@Override @Override
public boolean isAuthorized(RequestedAction whatToAuth) { public boolean isAuthorized(RequestedAction whatToAuth) {

View file

@ -18,7 +18,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct
* A class of simple permissions. Each instance holds a RequestedAction, and * A class of simple permissions. Each instance holds a RequestedAction, and
* will only authorize that RequestedAction (or one with the same URI). * will only authorize that RequestedAction (or one with the same URI).
*/ */
public class SimplePermission implements Permission { public class SimplePermission extends Permission {
private static final Log log = LogFactory.getLog(SimplePermission.class); private static final Log log = LogFactory.getLog(SimplePermission.class);
private static final String NAMESPACE = "java:" private static final String NAMESPACE = "java:"
@ -88,18 +88,17 @@ public class SimplePermission implements Permission {
} }
private final String localName; private final String localName;
private final String uri;
public final RequestedAction ACTION; public final RequestedAction ACTION;
public final Actions ACTIONS; public final Actions ACTIONS;
public SimplePermission(String localName) { public SimplePermission(String localName) {
super(NAMESPACE + localName);
if (localName == null) { if (localName == null) {
throw new NullPointerException("name may not be null."); throw new NullPointerException("name may not be null.");
} }
this.localName = localName; this.localName = localName;
this.uri = NAMESPACE + localName;
this.ACTION = new SimpleRequestedAction(localName); this.ACTION = new SimpleRequestedAction(localName);
this.ACTIONS = new Actions(this.ACTION); this.ACTIONS = new Actions(this.ACTION);
@ -110,21 +109,14 @@ public class SimplePermission implements Permission {
allInstances.put(uri, this); allInstances.put(uri, this);
} }
@Override
public String getLocalName() { public String getLocalName() {
return this.localName; return this.localName;
} }
@Override
public String getNamespace() { public String getNamespace() {
return NAMESPACE; return NAMESPACE;
} }
@Override
public String getUri() {
return NAMESPACE + this.localName;
}
@Override @Override
public boolean isAuthorized(RequestedAction whatToAuth) { public boolean isAuthorized(RequestedAction whatToAuth) {
if (whatToAuth != null) { if (whatToAuth != null) {