All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.security.AuthorizationStrategy Maven / Gradle / Ivy

package hudson.security;

import hudson.ExtensionPoint;
import hudson.model.AbstractItem;
import hudson.model.AbstractProject;
import hudson.model.Computer;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.User;
import hudson.model.View;
import hudson.util.DescriptorList;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;

import net.sf.json.JSONObject;

import org.acegisecurity.Authentication;
import org.kohsuke.stapler.StaplerRequest;

/**
 * Controls authorization throughout Hudson.
 *
 * 

Persistence

*

* This object will be persisted along with {@link Hudson} object. * Hudson by itself won't put the ACL returned from {@link #getRootACL()} into the serialized object graph, * so if that object contains state and needs to be persisted, it's the responsibility of * {@link AuthorizationStrategy} to do so (by keeping them in an instance field.) * *

Re-configuration

*

* The corresponding {@link Describable} instance will be asked to create a new {@link AuthorizationStrategy} * every time the system configuration is updated. Implementations that keep more state in ACL beyond * the system configuration should use {@link Hudson#getAuthorizationStrategy()} to talk to the current * instance to carry over the state. * * @author Kohsuke Kawaguchi * @see SecurityRealm */ public abstract class AuthorizationStrategy implements Describable, ExtensionPoint { /** * Returns the instance of {@link ACL} where all the other {@link ACL} instances * for all the other model objects eventually delegate. *

* IOW, this ACL will have the ultimate say on the access control. */ public abstract ACL getRootACL(); public ACL getACL(AbstractProject project) { return getRootACL(); } /** * Implementation can choose to provide different ACL for different views. * This can be used as a basis for more fine-grained access control. * *

* The default implementation returns {@link #getRootACL()}. * * @since 1.220 */ public ACL getACL(View item) { return getRootACL(); } /** * Implementation can choose to provide different ACL for different items. * This can be used as a basis for more fine-grained access control. * *

* The default implementation returns {@link #getRootACL()}. * * @since 1.220 */ public ACL getACL(AbstractItem item) { return getRootACL(); } /** * Implementation can choose to provide different ACL per user. * This can be used as a basis for more fine-grained access control. * *

* The default implementation returns {@link #getRootACL()}. * * @since 1.221 */ public ACL getACL(User user) { return getRootACL(); } /** * Implementation can choose to provide different ACL for different computers. * This can be used as a basis for more fine-grained access control. * *

* The default implementation returns {@link #getRootACL()}. * * @since 1.220 */ public ACL getACL(Computer computer) { return getRootACL(); } /** * Returns the list of all group/role names used in this authorization strategy, * and the ACL returned from the {@link #getRootACL()} method. *

* This method is used by {@link ContainerAuthentication} to work around the servlet API issue * that prevents us from enumerating roles that the user has. * * @return * never null. */ public abstract Collection getGroups(); /** * All registered {@link SecurityRealm} implementations. */ public static final DescriptorList LIST = new DescriptorList(); /** * {@link AuthorizationStrategy} that implements the semantics * of unsecured Hudson where everyone has full control. */ public static final AuthorizationStrategy UNSECURED = new Unsecured(); private static final class Unsecured extends AuthorizationStrategy implements Serializable { /** * Maintains the singleton semantics. */ private Object readResolve() { return UNSECURED; } public Descriptor getDescriptor() { return DESCRIPTOR; } @Override public ACL getRootACL() { return UNSECURED_ACL; } public Collection getGroups() { return Collections.emptySet(); } private static final ACL UNSECURED_ACL = new ACL() { public boolean hasPermission(Authentication a, Permission permission) { return true; } }; private static final Descriptor DESCRIPTOR = new Descriptor(Unsecured.class) { public String getDisplayName() { return Messages.AuthorizationStrategy_DisplayName(); } public AuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException { return UNSECURED; } public String getHelpFile() { return "/help/security/no-authorization.html"; } }; static { LIST.load(FullControlOnceLoggedInAuthorizationStrategy.class); LIST.load(GlobalMatrixAuthorizationStrategy.class); LIST.load(LegacyAuthorizationStrategy.class); LIST.load(ProjectMatrixAuthorizationStrategy.class); // can't do this in the constructor due to the initialization order LIST.add(Unsecured.DESCRIPTOR); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy