Merge pull request #7973 from abollini/performance-improvements

Performance improvements
This commit is contained in:
Tim Donohue
2021-10-15 14:36:19 -05:00
committed by GitHub
3 changed files with 19 additions and 13 deletions

View File

@@ -250,13 +250,8 @@ public class AuthorizeServiceImpl implements AuthorizeService {
if (e != null) { if (e != null) {
userToCheck = e; userToCheck = e;
// perform isAdmin check to see // perform immediately isAdmin check as this is cheap
// if user is an Admin on this object if (isAdmin(c, e)) {
DSpaceObject adminObject = useInheritance ? serviceFactory.getDSpaceObjectService(o)
.getAdminObject(c, o, action) : null;
if (isAdmin(c, e, adminObject)) {
c.cacheAuthorizedAction(o, action, e, true, null);
return true; return true;
} }
} }
@@ -280,13 +275,15 @@ public class AuthorizeServiceImpl implements AuthorizeService {
ignoreCustomPolicies = !isAnyItemInstalled(c, Arrays.asList(((Bundle) o))); ignoreCustomPolicies = !isAnyItemInstalled(c, Arrays.asList(((Bundle) o)));
} }
if (o instanceof Item) { if (o instanceof Item) {
if (workspaceItemService.findByItem(c, (Item) o) != null || // the isArchived check is fast and would exclude the possibility that the item
workflowItemService.findByItem(c, (Item) o) != null) { // is a workspace or workflow without further queries
if (!((Item) o).isArchived() &&
(workspaceItemService.findByItem(c, (Item) o) != null ||
workflowItemService.findByItem(c, (Item) o) != null)) {
ignoreCustomPolicies = true; ignoreCustomPolicies = true;
} }
} }
for (ResourcePolicy rp : getPoliciesActionFilter(c, o, action)) { for (ResourcePolicy rp : getPoliciesActionFilter(c, o, action)) {
if (ignoreCustomPolicies if (ignoreCustomPolicies
@@ -322,6 +319,16 @@ public class AuthorizeServiceImpl implements AuthorizeService {
} }
} }
if (e != null) {
// if user is an Admin on this object
DSpaceObject adminObject = useInheritance ? serviceFactory.getDSpaceObjectService(o)
.getAdminObject(c, o, action) : null;
if (isAdmin(c, e, adminObject)) {
c.cacheAuthorizedAction(o, action, e, true, null);
return true;
}
}
// default authorization is denial // default authorization is denial
c.cacheAuthorizedAction(o, action, e, false, null); c.cacheAuthorizedAction(o, action, e, false, null);
return false; return false;

View File

@@ -53,8 +53,7 @@ public class AdminRestPermissionEvaluatorPlugin extends RestObjectPermissionEval
EPerson ePerson = null; EPerson ePerson = null;
try { try {
ePerson = ePersonService.findByEmail(context, (String) authentication.getPrincipal()); ePerson = context.getCurrentUser();
if (ePerson != null) { if (ePerson != null) {
//Check if user is a repository admin //Check if user is a repository admin

View File

@@ -76,7 +76,7 @@ public class AuthorizeServicePermissionEvaluatorPlugin extends RestObjectPermiss
return false; return false;
} }
ePerson = ePersonService.findByEmail(context, (String) authentication.getPrincipal()); ePerson = context.getCurrentUser();
if (dSpaceObjectService != null && dsoId != null) { if (dSpaceObjectService != null && dsoId != null) {
DSpaceObject dSpaceObject = dSpaceObjectService.find(context, dsoId); DSpaceObject dSpaceObject = dSpaceObjectService.find(context, dsoId);