Details
-
Bug
-
Resolution: Fixed
-
Low
-
2.5.0
Description
Since Stash 2.5.0 `find` method has @PreAuthorize("hasGlobalPermission('LICENSED_USER')"), but SecirityService has single parameter for `permission`.
I need to use follow code:
doWithPermissions(securityService,
"Get all open pull-requests in attempt to merge them",
Lists.newArrayList(Permission.REPO_READ, Permission.LICENSED_USER),
findOp(pullRequestService, authenticationContext));
private static <T, E extends RuntimeException> T doWithPermissions( final SecurityService securityService, final String reason, final List<Permission> permissions, final Operation<T, E> op) { Permission permission = permissions.get(0); List<Permission> permissionsTail = permissions.subList(1, permissions.size()); if (permissionsTail.size() > 0) { return securityService.doWithPermission(reason, permission, doWithPermissionsOp(securityService, reason, op, permissionsTail)); } return securityService.doWithPermission(reason, permission, op); } private static <T, E extends RuntimeException> Operation<T, E> doWithPermissionsOp( final SecurityService securityService, final String reason, final Operation<T, E> delegate, final List<Permission> permissions) { return new Operation<T, E>() { @Override public T perform() throws E { return doWithPermissions(securityService, reason, permissions, delegate); } }; }