From ac05680bb6eba6efc8a825ba59fda6fbad753d22 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 2 Feb 2018 09:56:55 -0500 Subject: [PATCH] Introduced ACL.lambda convenience method (#3260) * Introduced ACL.lambda convenience method. * Javadoc --- core/src/main/java/hudson/model/User.java | 10 +++------- core/src/main/java/hudson/security/ACL.java | 16 ++++++++++++++++ .../hudson/security/AuthorizationStrategy.java | 14 +++----------- .../test/java/hudson/model/TaskActionTest.java | 6 +----- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java index 7f132023b7..148526ca1d 100644 --- a/core/src/main/java/hudson/model/User.java +++ b/core/src/main/java/hudson/model/User.java @@ -977,14 +977,10 @@ public class User extends AbstractModelObject implements AccessControlled, Descr } public ACL getACL() { - final ACL base = Jenkins.getInstance().getAuthorizationStrategy().getACL(this); + ACL base = Jenkins.getInstance().getAuthorizationStrategy().getACL(this); // always allow a non-anonymous user full control of himself. - return new ACL() { - public boolean hasPermission(Authentication a, Permission permission) { - return (idStrategy().equals(a.getName(), id) && !(a instanceof AnonymousAuthenticationToken)) - || base.hasPermission(a, permission); - } - }; + return ACL.lambda((a, permission) -> (idStrategy().equals(a.getName(), id) && !(a instanceof AnonymousAuthenticationToken)) + || base.hasPermission(a, permission)); } /** diff --git a/core/src/main/java/hudson/security/ACL.java b/core/src/main/java/hudson/security/ACL.java index 41f8b5a9bc..95b3f8fc46 100644 --- a/core/src/main/java/hudson/security/ACL.java +++ b/core/src/main/java/hudson/security/ACL.java @@ -34,6 +34,7 @@ import hudson.model.Item; import hudson.remoting.Callable; import hudson.model.ItemGroup; import hudson.model.TopLevelItemDescriptor; +import java.util.function.BiFunction; import jenkins.security.NonSerializableSecurityContext; import jenkins.model.Jenkins; import jenkins.security.NotReallyRoleSensitiveCallable; @@ -95,6 +96,21 @@ public abstract class ACL { */ public abstract boolean hasPermission(@Nonnull Authentication a, @Nonnull Permission permission); + /** + * Creates a simple {@link ACL} implementation based on a “single-abstract-method” easily implemented via lambda syntax. + * @param impl the implementation of {@link ACL#hasPermission(Authentication, Permission)} + * @return an adapter to that lambda + * @since FIXME + */ + public static ACL lambda(final BiFunction impl) { + return new ACL() { + @Override + public boolean hasPermission(Authentication a, Permission permission) { + return impl.apply(a, permission); + } + }; + } + /** * Checks if the current security principal has the permission to create top level items within the specified * item group. diff --git a/core/src/main/java/hudson/security/AuthorizationStrategy.java b/core/src/main/java/hudson/security/AuthorizationStrategy.java index a875908f21..a273e984b2 100644 --- a/core/src/main/java/hudson/security/AuthorizationStrategy.java +++ b/core/src/main/java/hudson/security/AuthorizationStrategy.java @@ -95,9 +95,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl { ACL base = item.getOwner().getACL(); boolean hasPermission = base.hasPermission(a, permission); @@ -106,8 +104,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl true); @Extension @Symbol("unsecured") public static final class DescriptorImpl extends Descriptor { diff --git a/core/src/test/java/hudson/model/TaskActionTest.java b/core/src/test/java/hudson/model/TaskActionTest.java index ec31498e07..bfcf679cad 100644 --- a/core/src/test/java/hudson/model/TaskActionTest.java +++ b/core/src/test/java/hudson/model/TaskActionTest.java @@ -45,11 +45,7 @@ public class TaskActionTest { } protected ACL getACL() { - return new ACL() { - public boolean hasPermission(Authentication a, Permission permission) { - return true; - } - }; + return ACL.lambda((a, p) -> true); } } -- GitLab