提交 ac05680b 编写于 作者: J Jesse Glick 提交者: Oleg Nenashev

Introduced ACL.lambda convenience method (#3260)

* Introduced ACL.lambda convenience method.

* Javadoc
上级 f1fc0f02
......@@ -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));
}
/**
......
......@@ -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<Authentication, Permission, Boolean> 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.
......
......@@ -95,9 +95,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl<Auth
* @since 1.220
*/
public @Nonnull ACL getACL(final @Nonnull View item) {
return new ACL() {
@Override
public boolean hasPermission(Authentication a, Permission permission) {
return ACL.lambda((a, permission) -> {
ACL base = item.getOwner().getACL();
boolean hasPermission = base.hasPermission(a, permission);
......@@ -106,8 +104,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl<Auth
}
return hasPermission;
}
};
});
}
/**
......@@ -225,12 +222,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl<Auth
return Collections.emptySet();
}
private static final ACL UNSECURED_ACL = new ACL() {
@Override
public boolean hasPermission(Authentication a, Permission permission) {
return true;
}
};
private static final ACL UNSECURED_ACL = ACL.lambda((a, p) -> true);
@Extension @Symbol("unsecured")
public static final class DescriptorImpl extends Descriptor<AuthorizationStrategy> {
......
......@@ -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);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册