Implement equals() and hashCode() on PermissionBackendCondition
We want to be able to deduplicate PermissionBackendConditions when given a list of such objects. Therefore, this commit implements equals() and hashCode(). This is not trivial since the individual implementations of PermissionBackendCondition encapsulate a CurrentUser as well as a PermissionBackend. Both of which do not implement equals() and hashCode(). This is correct, since PermissionBackend is a service and comparing it to other PermissionBackends makes no sense. CurrentUser could be compared to other CurrentUser objects but the outcome depends on wheather two annonymous users should be considered equal or not. This depends on the use case. Therefore, this commit adds user() and resourcePath() to PermissionBackend to get the entities that a PermissionBackend object is scoped to and evaluate the case at hand directly in PermissionBackendCondition. resourcePath() can come in handy in other places as well since it is an accurate representation of the resource that we are performing checks on. Concrete PermissionBackend implementations can use it to communicate with their remove service if desired. The implementation for resourcePath() picks /+ as the delimiter since it is a forbidden character combination for project names. An alternative would be to URL-encode the project name, but this is more expensive. Change-Id: I7b357e61bfc6f14acc7b0d06830b615847798ec3
This commit is contained in:
@@ -70,6 +70,11 @@ public class DefaultPermissionBackend extends PermissionBackend {
|
||||
this.user = checkNotNull(user, "user");
|
||||
}
|
||||
|
||||
@Override
|
||||
public CurrentUser user() {
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForProject project(Project.NameKey project) {
|
||||
try {
|
||||
|
Reference in New Issue
Block a user