提交 b0ac41c3 编写于 作者: J Jesse Glick

Split off matrix-auth plugin.

上级 c01f2564
......@@ -61,6 +61,8 @@ Upcoming changes</a>
<li class=bug>
Windows JDK installer should not install a public JRE.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-8957">issue 8957</a>)
<li class='rfe'>
Split matrix authorization strategies into an independent plugin.
<li class=bug>
SCM polling sometimes broken since 1.527 due to a change in how environment variables are calculated.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-19307">issue 19307</a>)
......
......@@ -272,7 +272,8 @@ public class ClassicPluginStrategy implements PluginStrategy {
new DetachedPlugin("external-monitor-job","1.467.*","1.0"),
new DetachedPlugin("ldap","1.467.*","1.0"),
new DetachedPlugin("pam-auth","1.467.*","1.0"),
new DetachedPlugin("mailer","1.493.*","1.2")
new DetachedPlugin("mailer","1.493.*","1.2"),
new DetachedPlugin("matrix-auth","1.535.*","1.0")
);
/**
......
/*
* The MIT License
*
* Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc., Peter Hayes, Tom Huybrechts
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package hudson.security;
import hudson.diagnosis.OldDataMonitor;
import hudson.model.Item;
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import jenkins.model.Jenkins;
import hudson.Extension;
import hudson.util.FormValidation;
import hudson.util.RobustReflectionConverter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Collections;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.IOException;
import net.sf.json.JSONObject;
import org.acegisecurity.acls.sid.Sid;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.AncestorInPath;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import javax.servlet.ServletException;
/**
* {@link JobProperty} to associate ACL for each project.
*
* <p>
* Once created (and initialized), this object becomes immutable.
*/
public class AuthorizationMatrixProperty extends JobProperty<Job<?, ?>> {
private transient SidACL acl = new AclImpl();
/**
* List up all permissions that are granted.
*
* Strings are either the granted authority or the principal, which is not
* distinguished.
*/
private final Map<Permission, Set<String>> grantedPermissions = new HashMap<Permission, Set<String>>();
private Set<String> sids = new HashSet<String>();
private AuthorizationMatrixProperty() {
}
public AuthorizationMatrixProperty(Map<Permission, Set<String>> grantedPermissions) {
// do a deep copy to be safe
for (Entry<Permission,Set<String>> e : grantedPermissions.entrySet())
this.grantedPermissions.put(e.getKey(),new HashSet<String>(e.getValue()));
}
public Set<String> getGroups() {
return sids;
}
/**
* Returns all SIDs configured in this matrix, minus "anonymous"
*
* @return Always non-null.
*/
public List<String> getAllSIDs() {
Set<String> r = new HashSet<String>();
for (Set<String> set : grantedPermissions.values())
r.addAll(set);
r.remove("anonymous");
String[] data = r.toArray(new String[r.size()]);
Arrays.sort(data);
return Arrays.asList(data);
}
/**
* Returns all the (Permission,sid) pairs that are granted, in the multi-map form.
*
* @return
* read-only. never null.
*/
public Map<Permission,Set<String>> getGrantedPermissions() {
return Collections.unmodifiableMap(grantedPermissions);
}
/**
* Adds to {@link #grantedPermissions}. Use of this method should be limited
* during construction, as this object itself is considered immutable once
* populated.
*/
protected void add(Permission p, String sid) {
Set<String> set = grantedPermissions.get(p);
if (set == null)
grantedPermissions.put(p, set = new HashSet<String>());
set.add(sid);
sids.add(sid);
}
@Extension
public static class DescriptorImpl extends JobPropertyDescriptor {
@Override
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
formData = formData.getJSONObject("useProjectSecurity");
if (formData.isNullObject())
return null;
AuthorizationMatrixProperty amp = new AuthorizationMatrixProperty();
for (Map.Entry<String, Object> r : (Set<Map.Entry<String, Object>>) formData.getJSONObject("data").entrySet()) {
String sid = r.getKey();
if (r.getValue() instanceof JSONObject) {
for (Map.Entry<String, Boolean> e : (Set<Map.Entry<String, Boolean>>) ((JSONObject) r
.getValue()).entrySet()) {
if (e.getValue()) {
Permission p = Permission.fromId(e.getKey());
amp.add(p, sid);
}
}
}
}
return amp;
}
@Override
public boolean isApplicable(Class<? extends Job> jobType) {
// only applicable when ProjectMatrixAuthorizationStrategy is in charge
return Jenkins.getInstance().getAuthorizationStrategy() instanceof ProjectMatrixAuthorizationStrategy;
}
@Override
public String getDisplayName() {
return "Authorization Matrix";
}
public List<PermissionGroup> getAllGroups() {
List<PermissionGroup> r = new ArrayList<PermissionGroup>();
for (PermissionGroup pg : PermissionGroup.getAll()) {
if (pg.hasPermissionContainedBy(PermissionScope.ITEM))
r.add(pg);
}
return r;
}
public boolean showPermission(Permission p) {
return p.getEnabled() && p.isContainedBy(PermissionScope.ITEM);
}
public FormValidation doCheckName(@AncestorInPath Job project, @QueryParameter String value) throws IOException, ServletException {
return GlobalMatrixAuthorizationStrategy.DESCRIPTOR.doCheckName_(value, project, Item.CONFIGURE);
}
}
private final class AclImpl extends SidACL {
protected Boolean hasPermission(Sid sid, Permission p) {
if (AuthorizationMatrixProperty.this.hasPermission(toString(sid),p))
return true;
return null;
}
}
public SidACL getACL() {
return acl;
}
/**
* Checks if the given SID has the given permission.
*/
public boolean hasPermission(String sid, Permission p) {
for (; p != null; p = p.impliedBy) {
Set<String> set = grantedPermissions.get(p);
if (set != null && set.contains(sid))
return true;
}
return false;
}
/**
* Checks if the permission is explicitly given, instead of implied through {@link Permission#impliedBy}.
*/
public boolean hasExplicitPermission(String sid, Permission p) {
Set<String> set = grantedPermissions.get(p);
return set != null && set.contains(sid);
}
/**
* Works like {@link #add(Permission, String)} but takes both parameters
* from a single string of the form <tt>PERMISSIONID:sid</tt>
*/
private void add(String shortForm) {
int idx = shortForm.indexOf(':');
Permission p = Permission.fromId(shortForm.substring(0, idx));
if (p==null)
throw new IllegalArgumentException("Failed to parse '"+shortForm+"' --- no such permission");
add(p, shortForm.substring(idx + 1));
}
/**
* Persist {@link ProjectMatrixAuthorizationStrategy} as a list of IDs that
* represent {@link ProjectMatrixAuthorizationStrategy#grantedPermissions}.
*/
public static final class ConverterImpl implements Converter {
public boolean canConvert(Class type) {
return type == AuthorizationMatrixProperty.class;
}
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
AuthorizationMatrixProperty amp = (AuthorizationMatrixProperty) source;
for (Entry<Permission, Set<String>> e : amp.grantedPermissions
.entrySet()) {
String p = e.getKey().getId();
for (String sid : e.getValue()) {
writer.startNode("permission");
writer.setValue(p + ':' + sid);
writer.endNode();
}
}
}
public Object unmarshal(HierarchicalStreamReader reader,
final UnmarshallingContext context) {
AuthorizationMatrixProperty as = new AuthorizationMatrixProperty();
String prop = reader.peekNextChild();
if (prop!=null && prop.equals("useProjectSecurity")) {
reader.moveDown();
reader.getValue(); // we used to use this but not any more.
reader.moveUp();
}
while (reader.hasMoreChildren()) {
reader.moveDown();
try {
as.add(reader.getValue());
} catch (IllegalArgumentException ex) {
Logger.getLogger(AuthorizationMatrixProperty.class.getName())
.log(Level.WARNING,"Skipping a non-existent permission",ex);
RobustReflectionConverter.addErrorInContext(context, ex);
}
reader.moveUp();
}
if (GlobalMatrixAuthorizationStrategy.migrateHudson2324(as.grantedPermissions))
OldDataMonitor.report(context, "1.301");
return as;
}
}
}
/*
* The MIT License
*
* Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package hudson.security;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import hudson.diagnosis.OldDataMonitor;
import hudson.model.Descriptor;
import jenkins.model.Jenkins;
import hudson.model.Item;
import hudson.util.FormValidation;
import hudson.util.FormValidation.Kind;
import hudson.util.VersionNumber;
import hudson.util.RobustReflectionConverter;
import hudson.Functions;
import hudson.Extension;
import net.sf.json.JSONObject;
import org.acegisecurity.AuthenticationException;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.acls.sid.Sid;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.QueryParameter;
import org.springframework.dao.DataAccessException;
import javax.servlet.ServletException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.IOException;
import java.util.Collections;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* Role-based authorization via a matrix.
*
* @author Kohsuke Kawaguchi
*/
// TODO: think about the concurrency commitment of this class
public class GlobalMatrixAuthorizationStrategy extends AuthorizationStrategy {
private transient SidACL acl = new AclImpl();
/**
* List up all permissions that are granted.
*
* Strings are either the granted authority or the principal,
* which is not distinguished.
*/
private final Map<Permission,Set<String>> grantedPermissions = new HashMap<Permission, Set<String>>();
private final Set<String> sids = new HashSet<String>();
/**
* Adds to {@link #grantedPermissions}.
* Use of this method should be limited during construction,
* as this object itself is considered immutable once populated.
*/
public void add(Permission p, String sid) {
if (p==null)
throw new IllegalArgumentException();
Set<String> set = grantedPermissions.get(p);
if(set==null)
grantedPermissions.put(p,set = new HashSet<String>());
set.add(sid);
sids.add(sid);
}
/**
* Works like {@link #add(Permission, String)} but takes both parameters
* from a single string of the form <tt>PERMISSIONID:sid</tt>
*/
private void add(String shortForm) {
int idx = shortForm.indexOf(':');
Permission p = Permission.fromId(shortForm.substring(0, idx));
if (p==null)
throw new IllegalArgumentException("Failed to parse '"+shortForm+"' --- no such permission");
add(p,shortForm.substring(idx+1));
}
@Override
public SidACL getRootACL() {
return acl;
}
public Set<String> getGroups() {
return sids;
}
/**
* Due to HUDSON-2324, we want to inject Item.READ permission to everyone who has Hudson.READ,
* to remain backward compatible.
* @param grantedPermissions
*/
/*package*/ static boolean migrateHudson2324(Map<Permission,Set<String>> grantedPermissions) {
boolean result = false;
if(Jenkins.getInstance().isUpgradedFromBefore(new VersionNumber("1.300.*"))) {
Set<String> f = grantedPermissions.get(Jenkins.READ);
if (f!=null) {
Set<String> t = grantedPermissions.get(Item.READ);
if (t!=null)
result = t.addAll(f);
else {
t = new HashSet<String>(f);
result = true;
}
grantedPermissions.put(Item.READ,t);
}
}
return result;
}
/**
* Checks if the given SID has the given permission.
*/
public boolean hasPermission(String sid, Permission p) {
for(; p!=null; p=p.impliedBy) {
Set<String> set = grantedPermissions.get(p);
if(set!=null && set.contains(sid) && p.getEnabled())
return true;
}
return false;
}
/**
* Checks if the permission is explicitly given, instead of implied through {@link Permission#impliedBy}.
*/
public boolean hasExplicitPermission(String sid, Permission p) {
Set<String> set = grantedPermissions.get(p);
return set != null && set.contains(sid) && p.getEnabled();
}
/**
* Returns all SIDs configured in this matrix, minus "anonymous"
*
* @return
* Always non-null.
*/
public List<String> getAllSIDs() {
Set<String> r = new HashSet<String>();
for (Set<String> set : grantedPermissions.values())
r.addAll(set);
r.remove("anonymous");
String[] data = r.toArray(new String[r.size()]);
Arrays.sort(data);
return Arrays.asList(data);
}
private final class AclImpl extends SidACL {
protected Boolean hasPermission(Sid p, Permission permission) {
if(GlobalMatrixAuthorizationStrategy.this.hasPermission(toString(p),permission))
return true;
return null;
}
}
@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
/**
* Persist {@link GlobalMatrixAuthorizationStrategy} as a list of IDs that
* represent {@link GlobalMatrixAuthorizationStrategy#grantedPermissions}.
*/
public static class ConverterImpl implements Converter {
public boolean canConvert(Class type) {
return type==GlobalMatrixAuthorizationStrategy.class;
}
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
GlobalMatrixAuthorizationStrategy strategy = (GlobalMatrixAuthorizationStrategy)source;
// Output in alphabetical order for readability.
SortedMap<Permission, Set<String>> sortedPermissions = new TreeMap<Permission, Set<String>>(Permission.ID_COMPARATOR);
sortedPermissions.putAll(strategy.grantedPermissions);
for (Entry<Permission, Set<String>> e : sortedPermissions.entrySet()) {
String p = e.getKey().getId();
List<String> sids = new ArrayList<String>(e.getValue());
Collections.sort(sids);
for (String sid : sids) {
writer.startNode("permission");
writer.setValue(p+':'+sid);
writer.endNode();
}
}
}
public Object unmarshal(HierarchicalStreamReader reader, final UnmarshallingContext context) {
GlobalMatrixAuthorizationStrategy as = create();
while (reader.hasMoreChildren()) {
reader.moveDown();
try {
as.add(reader.getValue());
} catch (IllegalArgumentException ex) {
Logger.getLogger(GlobalMatrixAuthorizationStrategy.class.getName())
.log(Level.WARNING,"Skipping a non-existent permission",ex);
RobustReflectionConverter.addErrorInContext(context, ex);
}
reader.moveUp();
}
if (migrateHudson2324(as.grantedPermissions))
OldDataMonitor.report(context, "1.301");
return as;
}
protected GlobalMatrixAuthorizationStrategy create() {
return new GlobalMatrixAuthorizationStrategy();
}
}
public static class DescriptorImpl extends Descriptor<AuthorizationStrategy> {
protected DescriptorImpl(Class<? extends GlobalMatrixAuthorizationStrategy> clazz) {
super(clazz);
}
public DescriptorImpl() {
}
public String getDisplayName() {
return Messages.GlobalMatrixAuthorizationStrategy_DisplayName();
}
@Override
public AuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException {
GlobalMatrixAuthorizationStrategy gmas = create();
for(Map.Entry<String,JSONObject> r : (Set<Map.Entry<String,JSONObject>>)formData.getJSONObject("data").entrySet()) {
String sid = r.getKey();
for(Map.Entry<String,Boolean> e : (Set<Map.Entry<String,Boolean>>)r.getValue().entrySet()) {
if(e.getValue()) {
Permission p = Permission.fromId(e.getKey());
gmas.add(p,sid);
}
}
}
return gmas;
}
protected GlobalMatrixAuthorizationStrategy create() {
return new GlobalMatrixAuthorizationStrategy();
}
public List<PermissionGroup> getAllGroups() {
List<PermissionGroup> groups = new ArrayList<PermissionGroup>(PermissionGroup.getAll());
groups.remove(PermissionGroup.get(Permission.class));
return groups;
}
public boolean showPermission(Permission p) {
return p.getEnabled();
}
public FormValidation doCheckName(@QueryParameter String value ) throws IOException, ServletException {
return doCheckName_(value, Jenkins.getInstance(), Jenkins.ADMINISTER);
}
public FormValidation doCheckName_(String value, AccessControlled subject, Permission permission) throws IOException, ServletException {
if(!subject.hasPermission(permission)) return FormValidation.ok(); // can't check
final String v = value.substring(1,value.length()-1);
SecurityRealm sr = Jenkins.getInstance().getSecurityRealm();
String ev = Functions.escape(v);
if(v.equals("authenticated"))
// system reserved group
return FormValidation.respond(Kind.OK, makeImg("user.png") +ev);
try {
try {
sr.loadUserByUsername(v);
return FormValidation.respond(Kind.OK, makeImg("person.png")+ev);
} catch (UserMayOrMayNotExistException e) {
// undecidable, meaning the user may exist
return FormValidation.respond(Kind.OK, ev);
} catch (UsernameNotFoundException e) {
// fall through next
} catch (DataAccessException e) {
// fall through next
} catch (AuthenticationException e) {
// other seemingly unexpected error.
return FormValidation.error(e,"Failed to test the validity of the user name "+v);
}
try {
sr.loadGroupByGroupname(v);
return FormValidation.respond(Kind.OK, makeImg("user.png") +ev);
} catch (UserMayOrMayNotExistException e) {
// undecidable, meaning the group may exist
return FormValidation.respond(Kind.OK, ev);
} catch (UsernameNotFoundException e) {
// fall through next
} catch (DataAccessException e) {
// fall through next
} catch (AuthenticationException e) {
// other seemingly unexpected error.
return FormValidation.error(e,"Failed to test the validity of the group name "+v);
}
// couldn't find it. it doesn't exist
return FormValidation.respond(Kind.ERROR, makeImg("error.png") +ev);
} catch (Exception e) {
// if the check fails miserably, we still want the user to be able to see the name of the user,
// so use 'ev' as the message
return FormValidation.error(e,ev);
}
}
private String makeImg(String gif) {
return String.format("<img src='%s%s/images/16x16/%s' style='margin-right:0.2em'>", Stapler.getCurrentRequest().getContextPath(), Jenkins.RESOURCE_PATH, gif);
}
}
private static final Logger LOGGER = Logger.getLogger(GlobalMatrixAuthorizationStrategy.class.getName());
}
......@@ -51,7 +51,6 @@ import org.acegisecurity.providers.encoding.PasswordEncoder;
import org.acegisecurity.providers.encoding.ShaPasswordEncoder;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.apache.tools.ant.taskdefs.email.Mailer;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.ForwardToView;
import org.kohsuke.stapler.HttpResponse;
......@@ -73,7 +72,6 @@ import javax.servlet.http.HttpServletResponse;
import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
......@@ -280,9 +278,10 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea
*/
private void tryToMakeAdmin(User u) {
AuthorizationStrategy as = Jenkins.getInstance().getAuthorizationStrategy();
if (as instanceof GlobalMatrixAuthorizationStrategy) {
GlobalMatrixAuthorizationStrategy ma = (GlobalMatrixAuthorizationStrategy) as;
ma.add(Jenkins.ADMINISTER,u.getId());
for (PermissionAdder adder : Jenkins.getInstance().getExtensionList(PermissionAdder.class)) {
if (adder.add(as, u, Jenkins.ADMINISTER)) {
return;
}
}
}
......
/*
* The MIT License
*
* Copyright 2013 Jesse Glick.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package hudson.security;
import hudson.Extension;
import hudson.ExtensionPoint;
import hudson.model.User;
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.model.Jenkins;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
/**
* Service which can add permissions for a given user to the configured authorization strategy.
* Useful e.g. to make the first user created in the system be automatically granted administer privilege.
* @since 1.535
*/
public abstract class PermissionAdder implements ExtensionPoint {
private static final Logger LOGGER = Logger.getLogger(PermissionAdder.class.getName());
/**
* Called to try to give a user global permission.
* @param strategy the configured authorization strategy
* @param user a user
* @param perm a permission to grant, such as {@link Jenkins#ADMINISTER}
* @return true if the permission was added, false if this service is incapable of handling it
*/
public abstract boolean add(AuthorizationStrategy strategy, User user, Permission perm);
// TODO delete when 1.535 released and matrix-auth can depend on it
@Restricted(NoExternalUse.class)
@Extension public static final class Legacy extends PermissionAdder {
@Override public boolean add(AuthorizationStrategy strategy, User user, Permission perm) {
try {
strategy.getClass().getMethod("add", Permission.class, String.class).invoke(strategy, Jenkins.ADMINISTER, user.getId());
return true;
} catch (NoSuchMethodException x) {
// fine, not GlobalMatrixAuthorizationStrategy or a subclass
} catch (Exception x) {
LOGGER.log(Level.WARNING, null, x);
}
return false;
}
}
}
/*
* The MIT License
*
* Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Yahoo! Inc., Seiji Sogabe, Tom Huybrechts
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package hudson.security;
import hudson.model.AbstractItem;
import hudson.model.Descriptor;
import jenkins.model.Jenkins;
import hudson.model.Item;
import hudson.model.ItemGroup;
import hudson.model.Job;
import hudson.util.RobustReflectionConverter;
import hudson.Extension;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.mapper.Mapper;
import com.thoughtworks.xstream.core.JVM;
import java.util.HashSet;
import java.util.Set;
/**
* {@link GlobalMatrixAuthorizationStrategy} plus per-project ACL.
*
* <p>
* Per-project ACL is stored in {@link AuthorizationMatrixProperty}.
*
* @author Kohsuke Kawaguchi
*/
public class ProjectMatrixAuthorizationStrategy extends GlobalMatrixAuthorizationStrategy {
@Override
public ACL getACL(Job<?,?> project) {
AuthorizationMatrixProperty amp = project.getProperty(AuthorizationMatrixProperty.class);
if (amp != null) {
return amp.getACL().newInheritingACL(getACL(project.getParent()));
} else {
return getACL(project.getParent());
}
}
public SidACL getACL(ItemGroup g) {
if (g instanceof Item) {
Item item = (Item) g;
return (SidACL)item.getACL();
}
return getRootACL();
}
@Override
public SidACL getACL(AbstractItem item) {
return getACL(item.getParent());
}
@Override
public Set<String> getGroups() {
Set<String> r = new HashSet<String>();
r.addAll(super.getGroups());
for (Job<?,?> j : Jenkins.getInstance().getItems(Job.class)) {
AuthorizationMatrixProperty amp = j.getProperty(AuthorizationMatrixProperty.class);
if (amp != null)
r.addAll(amp.getGroups());
}
return r;
}
@Extension
public static final Descriptor<AuthorizationStrategy> DESCRIPTOR = new DescriptorImpl() {
@Override
protected GlobalMatrixAuthorizationStrategy create() {
return new ProjectMatrixAuthorizationStrategy();
}
@Override
public String getDisplayName() {
return Messages.ProjectMatrixAuthorizationStrategy_DisplayName();
}
};
public static class ConverterImpl extends GlobalMatrixAuthorizationStrategy.ConverterImpl {
private RobustReflectionConverter ref;
public ConverterImpl(Mapper m) {
ref = new RobustReflectionConverter(m,new JVM().bestReflectionProvider());
}
@Override
protected GlobalMatrixAuthorizationStrategy create() {
return new ProjectMatrixAuthorizationStrategy();
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
String name = reader.peekNextChild();
if(name!=null && (name.equals("permission") || name.equals("useProjectSecurity")))
// the proper serialization form
return super.unmarshal(reader, context);
else
// remain compatible with earlier problem where we used reflection converter
return ref.unmarshal(reader,context);
}
@Override
public boolean canConvert(Class type) {
return type==ProjectMatrixAuthorizationStrategy.class;
}
}
}
<!--
The MIT License
Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Tom Huybrechts
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:optionalBlock name="useProjectSecurity" title="${%Enable project-based security}" checked="${instance!=null}">
<st:include page="/hudson/security/GlobalMatrixAuthorizationStrategy/config.jelly" />
</f:optionalBlock>
</j:jelly>
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=Sl\u00e5 projektbaseret adgangskontrol til
Enable\ project-based\ security=Projektbasierte Sicherheit aktivieren
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=Habilitar seguridad en el projecto
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=Activer la sécurité basée projet
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=\u6A29\u9650\u8A2D\u5B9A(\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5358\u4F4D)\u306E\u6709\u52B9\u5316
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=Habilitar seguran\u00e7a baseada em projeto
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=Proje tabanl\u0131 g\u00fcvenlik ayarlar\u0131n\u0131 devreye al
# The MIT License
#
# Copyright (c) 2013, Chunghwa Telecom Co., Ltd., Pei-Tang Huang
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Enable\ project-based\ security=\u555f\u7528\u5c08\u6848\u578b\u5b89\u5168\u6027\u8a2d\u5b9a
<!--
The MIT License
Copyright (c) 2004-2011, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:block xmlns:local="local">
<j:set var="groups" value="${descriptor.allGroups}"/>
<d:taglib uri="local">
<!-- generate one row for the sid name @sid -->
<d:tag name="row">
<td class="left-most">${title}</td>
<j:forEach var="g" items="${groups}">
<j:forEach var="p" items="${g.permissions}">
<j:if test="${descriptor.showPermission(p)}">
<td width="*">
<f:checkbox name="[${p.id}]" checked="${instance.hasExplicitPermission(attrs.sid,p)}"/>
</td>
</j:if>
</j:forEach>
</j:forEach>
<td class="stop" style="text-align:left;">
<a href="#" class="toggleall">
<img alt="${%Toggle all}" src="${imagesURL}/16x16/edit-select-all.png" height="16" width="16"/>
</a>
<j:if test="${attrs.sid!='anonymous'}">
<a href="#" class="remove">
<img alt="${%Remove user/group}" src="${imagesURL}/16x16/stop.png" height="16" width="16"/>
</a>
</j:if>
</td>
</d:tag>
</d:taglib>
<link rel="stylesheet" href="${rootURL}${app.VIEW_RESOURCE_PATH}/hudson/security/table.css" type="text/css" />
<j:set var="strategyid" value="${descriptor.jsonSafeClassName}" />
<table id="${strategyid}" class="center-align global-matrix-authorization-strategy-table" name="data">
<!-- The first row will show grouping -->
<tr class="group-row">
<td rowspan="2" class="pane-header blank">
${%User/group}
</td>
<j:forEach var="g" items="${groups}">
<j:set var="cnt" value="${0}" />
<j:forEach var="p" items="${g.permissions}">
<j:if test="${descriptor.showPermission(p)}">
<j:set var="cnt" value="${cnt+1}"/>
</j:if>
</j:forEach>
<td class="pane-header" colspan="${cnt}">
${g.title}
</td>
</j:forEach>
<td rowspan="2" class="stop" />
</tr>
<!-- The second row for individual permission -->
<tr class="caption-row">
<j:forEach var="g" items="${groups}">
<j:forEach var="p" items="${g.permissions}">
<j:if test="${descriptor.showPermission(p)}">
<th class="pane" tooltip="${p.description}">
${p.name}
</th>
</j:if>
</j:forEach>
</j:forEach>
</tr>
<j:forEach var="sid" items="${instance.allSIDs}">
<tr name="[${sid}]" class="permission-row">
<local:row title="${sid}" sid="${sid}"/>
</tr>
</j:forEach>
<tr name="anonymous">
<local:row sid="anonymous" title="${%Anonymous}" />
</tr>
<!-- template row to be used for adding a new row -->
<j:set var="id" value="${h.generateId()}"/>
<tr id="${id}" style="display:none" class="permission-row">
<local:row sid="${null}" />
</tr>
</table>
<table style="margin-top:0.5em; margin-left: 2em; width: 100%">
<tr><td colspan="3">
${%User/group to add}:
<input type="text" id="${id}text" />
<input type="button" value="${%Add}" id="${id}button"/>
</td><td align="right">
<a href="#" class="help-button" helpURL="${rootURL}${descriptor.find('hudson.security.GlobalMatrixAuthorizationStrategy$DescriptorImpl').getHelpFile('user-group')}"><img src="${imagesURL}/16x16/help.png" alt="[help]" height="16" width="16"/></a>
</td></tr>
<f:helpArea />
</table>
<script>
(function() {
<!-- place master outside the DOM tree so that it won't creep into the submitted form -->
var master = document.getElementById('${id}');
var table = master.parentNode;
table.removeChild(master);
makeButton($$('${id}button'), function (e) {
<!-- when 'add' is clicked... -->
var name = $$('${id}text').value;
if(name=="") {
alert("Please enter a user name or a group name");
return;
}
if(findElementsBySelector(table,"TR").find(function(n){return n.getAttribute("name")=='['+name+']';})!=null) {
alert("Entry for '"+name+"' already exists");
return;
}
if(document.importNode!=null)
copy = document.importNode(master,true);
else
copy = master.cloneNode(true); <!-- for IE -->
copy.removeAttribute("id");
copy.removeAttribute("style");
copy.firstChild.innerHTML = name;
copy.setAttribute("name",'['+name+']');
table.appendChild(copy);
Behaviour.applySubtree(findAncestor(table,"TABLE"),true);
});
})();
Behaviour.specify("#${strategyid} TD.stop A.remove", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
e.onclick = function() {
var tr = findAncestor(this,"TR");
tr.parentNode.removeChild(tr);
return false;
}
e = null; <!-- avoid memory leak -->
});
Behaviour.specify("#${strategyid} TD.stop A.toggleall", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
e.onclick = function() {
var tr = findAncestor(this,"TR");
var inputs = tr.getElementsByTagName("INPUT");
for(var i=0; i&lt;inputs.length; i++){
if(inputs[i].type == "checkbox") inputs[i].checked = !inputs[i].checked;
}
return false;
};
e = null; <!-- avoid memory leak -->
});
<j:if test="${empty(descriptorPath)}">
<j:set var="descriptorPath" value="${descriptor.descriptorFullUrl}"/>
</j:if>
<!-- validates the name -->
Behaviour.specify("#${strategyid} TR.permission-row", 'GlobalMatrixAuthorizationStrategy', 0, function(e) {
FormChecker.delayedCheck("${descriptorPath}/checkName?value="+encodeURIComponent(e.getAttribute("name")),"GET",e.firstChild);
});
</script>
</f:block>
</j:jelly>
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Anonymous=Anonym
User/group\ to\ add=Brugergruppe der skal tilf\u00f8jes
Add=Tilf\u00f8j
Remove\ user/group=Fjern user/gruppe
User/group=Bruger/gruppe
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=Nutzer/Gruppe entfernen
Toggle\ all=Alles ausw\u00E4hlen
User/group=Benutzer/Gruppe
Anonymous=Anonym
User/group\ to\ add=Weitere Benutzer/Gruppe
Add=Hinzufügen
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
User/group=Usuario/Grupo
Anonymous=Anónimo
User/group\ to\ add=Usuario/Grupo para añadir
Add=Añadir
Remove\ user/group=Borrar usuario/grupo
Toggle\ all=Cambiar todo
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=Poista k\u00E4ytt\u00E4j\u00E4/ryhm\u00E4
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=Supprimer utilisateur/groupe
User/group=Utilisateur/groupe
Anonymous=Anonyme
User/group\ to\ add=Utilisateur/groupe à ajouter
Add=Ajouter
# The MIT License
#
# Copyright (c) 2004-2012, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Add=\u8ffd\u52a0
Anonymous=\u533f\u540d\u30e6\u30fc\u30b6\u30fc
User/group=\u30e6\u30fc\u30b6\u30fc/\u30b0\u30eb\u30fc\u30d7
User/group\ to\ add=\u8ffd\u52a0\u3059\u308b\u30e6\u30fc\u30b6\u30fc/\u30b0\u30eb\u30fc\u30d7
Toggle\ all=\u3059\u3079\u3066\u53cd\u8ee2
Remove\ user/group=\u30e6\u30fc\u30b6/\u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Add=Legg til
Anonymous=Anonym
User/group=Bruker/gruppe
User/group\ to\ add=Bruker/gruppe \u00E5 legge til
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=Verwijder gebruiker/groep
User/group=Gebruiker/groep
Anonymous=Anoniem
User/group\ to\ add=Toe te voegen gebruiker/groep
Add=Voeg toe
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
User/group=Usu\u00E1rios/Grupo
Anonymous=An\u00f4nimo
User/group\ to\ add=Usu\u00e1rio/grupo para adicionar
Add=Adicionar
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F/\u0433\u0440\u0443\u043F\u043F\u0443
Toggle\ all=\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u0441\u0451
User/group=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c/\u0433\u0440\u0443\u043f\u043f\u0430
Anonymous=\u0410\u043d\u043e\u043d\u0438\u043c
User/group\ to\ add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f/\u0433\u0440\u0443\u043f\u043f\u0443
Add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Add=L\u00E4gg till
Anonymous=Anonym
Remove\ user/group=Ta bort anv\u00E4ndare/grupp
Toggle\ all=V\u00E4xla alla
User/group=Anv\u00E4ndare/grupp
User/group\ to\ add=Anv\u00E4ndare/grupp att l\u00E4gga till
# The MIT License
#
# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
User/group=Kullan\u0131c\u0131/grup
Anonymous=Bilinmeyen
User/group\ to\ add=Eklenecek grup
Add=Ekle
# The MIT License
#
# Copyright (c) 2004-2010, Sun Microsystems, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Remove\ user/group=\u79FB\u9664\u7528\u6237/\u7EC4
Toggle\ all=\u5C55\u5F00\u5168\u90E8
User/group=\u7528\u6237/\u7ec4
Anonymous=\u533f\u540d\u7528\u6237
User/group\ to\ add=\u6dfb\u52a0\u7528\u6237/\u7ec4
Add=\u6dfb\u52a0
# The MIT License
#
# Copyright (c) 2004-2013, Sun Microsystems, Inc., Chunghwa Telecom Co., Ltd.,
# and Pei-Tang Huang
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Toggle\ all=\u53cd\u5411\u9078\u53d6
Remove\ user/group=\u79fb\u9664\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
User/group=\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
Anonymous=\u533f\u540d\u4f7f\u7528\u8005
User/group\ to\ add=\u8981\u65b0\u589e\u7684\u4f7f\u7528\u8005\u6216\u7fa4\u7d44
Add=\u65b0\u589e
<?jelly escape-by-default='true'?>
<l:ajax xmlns:l="/lib/layout">
<div>
Different security realm has different conventions about group names.
The best way to go about it is to login and see what group names you belong to,
by going to <a href="${rootURL}/whoAmI" target="_new">this diagnostics page</a>.
<p>
A special group "authenticated" is also available, which represents all
authenticated (logged in) users.
</p>
</div>
</l:ajax>
<?jelly escape-by-default='true'?>
<l:ajax xmlns:l="/lib/layout">
<div>
ユーザー情報の取得先によってグループ名は異なる記法が使われることがあります。
最善の方法は、一度ユーザーでログインして、この<a href="${rootURL}/whoAmI" target="_new">診断ページ</a>に行って実際にJenkinsが使っているグループ名を見ることです。
<p>
接頭辞である"ROLE_"と大文字であるか小文字であるかを変更するには、Jenkinsのアーカイブに含まれる<tt>WEB-INF/security/LDAPBindSecurityRealm.groovy</tt>を編集して、
再起動します。
</p>
</div>
</l:ajax>
<?jelly escape-by-default='true'?>
<l:ajax xmlns:l="/lib/layout">
<div>
不同的安全性領域對群組名稱有不一樣的慣例。
最好的方法就是登入後,到<a href="${rootURL}/whoAmI" target="_new">診斷頁</a>看您所屬的群組名稱。
<p>
另外,還可以使用特別群組 "authenticated" 來代表所有驗證通過 (已登入) 的使用者。
</p>
</div>
</l:ajax>
<div>
In this scheme, you can configure who can do what by using a big table.
<p>
Each column represents a permission. Hover the mouse over the permission names to get
more information about what they represent.
<p>
Each row represents a user or a group (often called 'role', depending on the security realm.)
This includes a special user 'anonymous', which represents unauthenticated users, as well
as 'authenticated', which represents all authenticated users (IOW, everyone except anonymous users.)
Use the text box below the table to add new users/groups/roles to the table, and click the
<tt>[x]</tt> icon to remove it from the table.
<p>
Permissions are additive. That is, if an user X is in group A, B, and C, then
the permissions that this user actually has are the union of all permissions given to
X, A, B, C, and anonymous.
</div>
<div>
In dieser Tabelle können Sie angeben, wer zu welchen Aktionen berechtigt ist.
<p>
Jede Spalte entspricht einer Berechtigung. Fahren Sie mit der Maus über die
Namen der Berechtigungen, um mehr Informationen darüber zu erhalten, was sie
bedeuten.
<p>
Jede Zeile entspricht einem Benutzer oder einer Benutzergruppe (je nach
Benutzerverzeichnis oft auch als "Rolle" bezeichnet). Die Zeilen beinhalten
auch die besonderen Benutzer 'anonymous' bzw. 'authenticated', welche
nichtangemeldete bzw. angemeldete Benutzer repräsentieren,
Verwenden Sie das untenstehende Textfeld, um neue Benutzer/Gruppen/Rollen zur Tabelle
hinzuzufügen und klicken Sie auf das <tt>[x]</tt>-Symbol, um sie wieder von der
Tabelle zu entfernen.
<p>
Berechtigungen sind additiv. Dies bedeutet, dass ein Benutzer X, der Mitglied
in den Gruppen A, B und C ist, die Vereinigungsmenge aller Berechtigungen
besitzt, die X, A, B, C und dem Benutzer 'anonymous' erteilt wurden.
</div>
\ No newline at end of file
<div>
<!-- OUTDATED -->
Cette option vous permet de configurer qui fait quoi dans un grand tableau.
<p>
Chaque colonne représente une autorisation. Faites glisser la souris au
dessus du nom d'une autorisation pour obtenir plus d'information sur
ce qu'elle représente.
<p>
Chaque ligne représente un utilisateur ou un groupe (souvent appelé
'rôle', selon les royaumes -realms- de sécurité).
On y trouve un utilisateur spécial 'anonymous' qui représente
les utilisateurs non authentifiés, ainsi qu'un utilisateur 'authenticated',
qui représente les utilisateurs authentifiés (c-à-d, tout le monde, à
l'exception des utilisateurs anonymes).
Utilisez le texte sous la table pour ajouter des nouveaux
utilisateurs/groupes/rôles à la table et cliquez sur l'icône
<tt>[x]</tt> pour les supprimer.
<p>
Les autorisations s'ajoutent les unes aux autres. En clair, si un
utilisateur X est présent dans les groupes A, B et C, alors les
autorisations associées à cet utilisateur sont l'union de toutes les
autorisations accordées à X, A, B, C et anonymous.
</div>
\ No newline at end of file
<div>
大きな表形式で、誰が何をできるのか設定します。
<p>
各列はパーミッションを表します。パーミッション名の上にマウスをあわせると、
そのパーミッションの詳細が表示されます。
<p>
各行はユーザーかグループ(セキュリティ・レルムでは、'ロール'とも呼ばれます)を表します。
この中には、Jenkinsにログインしていない匿名ユーザーをあらわす特別な「anonymous」と、
また、全てのログイン済みユーザーをあらわす特別な「authenticated」という名前を使うこともできます。
表の下にあるテキストボックスを使用して、ユーザー/グループ/ロールを表に追加し、
<tt>[x]</tt> のアイコンをクリックすると、表から削除します。
<p>
パーミッションは追加式です。つまり、ユーザーXがグループA、B、Cに所属しているなら、
このユーザーが実際に持つパーミッションは、
ユーザーX、グループA、B、Cおよび匿名ユーザーに与えられた全てのパーミッションの和になります。
</div>
<div>
<!-- OUTDATED -->
Neste esquema, voc&#234; pode configurar quem pode fazer o qu&#234; usando uma grande tabela.
<p>
Cada coluna representa uma permiss&#227;o. Passe o mouse sobre os nomes das permiss&#245;es para
obter mais informa&#231;&#227;o sobre o que elas representam.
<p>
Cada linha representa um usu&#225;rio ou grupo (frequentemente chamado de 'papel',
dependendo do dom&#237;nio de seguran&#231;a.)
Isto inclui um usu&#225;rio especial chamado 'anonymous', que representa os usu&#225;rios n&#227;o autenticados.
Use a caixa de texto abaixo da tabela para adicionar novos usu&#225;rios/grupos/pap&#233;is na tabela, e clique
no &#237;cone <tt>[x]</tt> para remover da tabela.
<p>
Permiss&#245;es s&#227;o cumulativas. Ou seja, se um usu&#225;rio X est&#225; nos grupos A, B, e C, ent&#227;o
as permiss&#245;es que este usu&#225;rio na verdade tem &#233; a &#250;ni&#227;o de todas as permiss&#245;es dadas para
X, A, B, C, e an&#244;nimos.
</div>
<div>
<!-- OUTDATED -->
В этом режиме вы можете явно указать допустимые операции, используя матрицу привилегий.
<p>
Каждая колонка представляет собой привилегию. Наведите курсор мыши на имя привелегии
для получения большей информации о её предназначении.
<p>
Каждая строка представляет собой пользователя или группу (обычно называемая "ролью", в
зависимости от используемого модуля безопасности). Список включает также специального
пользователя Аноним, который представляет собой неаутентифицированного пользователя.
Чтобы добавить нового пользователя/группу/роль в таблицу, используйте поле ввода под таблицей.
Чтобы удалить пользователя/группу/роль нажмите кнопку <tt>[x]</tt> в правой колонке.
<p>
Привилегии аддитивны, то есть если пользователь X состоит в группах A, B и C, тогда
реальные привилегии пользователя - объединение всех привилегий данных конкретно пользователю,
группам A, B и C и анонимному пользователю.
</div>
\ No newline at end of file
<div>
<!-- OUTDATED -->
Bu &#351;emada, tabloyu kullanarak kimin ne yapabilece&#287;ini belirleyebilirsiniz.
<p>
Her kolon bir yetkiyi temsil eder. Mouse ile yetki isimlerinin &#252;zerine
gelerek, daha fazla bilgi alabilirsiniz.
<p>
Her sat&#305;r bir kullan&#305;c&#305; veya grubu temsil eder (G&#252;venlik alan&#305;na ba&#287;l&#305; olarak, "rol" olarak da
adland&#305;r&#305;labilir). Bu sat&#305;rlar&#305;n i&#231;erisinde yetkisiz kullan&#305;c&#305;lar&#305; temsilen bilinmeyen (anonymous)
kullan&#305;c&#305; da yer almaktad&#305;r. A&#351;a&#287;&#305;daki metin kutusunu kullanarak, tabloya kullan&#305;c&#305;/grup/rol ekleyebilir,
<tt>[x]</tt> ikonuna t&#305;klayarak bunlar&#305; silebilirsiniz.
<p>
Yetkilendirme, kullan&#305;c&#305; ve ait oldu&#287;u gruplar&#305;n yetkilerinin birle&#351;im k&#252;mesi ile hesaplan&#305;r.
Yani X kullan&#305;c&#305;s&#305;, A, B ve C gruplar&#305;na dahilse, yetkileri X, A, B, C ve bilinmeyen kullan&#305;c&#305;ya
verilen yetkilerinin birle&#351;im k&#252;mesidir.
</div>
\ No newline at end of file
<div>
在这种授权模型中,你可以通过一个大的表格来配置什么用户可以做什么事.
<p>
每一列代表一个权限.把鼠标移动到权限名称上可以查看更详细的权限说明信息.
<p>
每一行代表一个用户或组(通常称为'角色',取决于安全域.),这其中包含特殊用户'anonymous',其代表未登录用户,同样还有'authenticated',其代表所有已认证的用户(也就是除了匿名用户的所有用户.)
可以使用表格下方的输入框来添加新的用户/组/角色到表格中,并且可以点击<tt>[x]</tt>图标将其从表格中删除.
<p>
权限是追加的,这说明如果一个用户X在A,B,C三个组中,那么X的权限是联合了X,A,B,C和匿名用户的所有权限.
</div>
<div>
在這種配置下,您可以透過一張大表格,設定每個人可以做的每件事。
<p>
每一欄都表示一項權限。將滑鼠游標移到權限名稱上,可以看到權限代表的意義說明。
<p>
一行就是一個使用者或群組 (依據安全性領域不同,一般也叫做「角色」)。
包括 "anonymous" 特殊使用者,代表沒有通過驗證的人;
另外也有 "authenticated",代表所有驗證通過的人 (換句話說,就是除了匿名使用者以外的所有人)。
透過表格下方的文字方塊可以新增使用者、群組、角色進來,按一下 <tt>[x]</tt> 圖示可以把它由表格中移掉。
<p>
權限會累加。也就是說,如果 X 使用者在 A, B, C 三個群組中,則該使用者實際的權限會是 X, A, B, C 及匿名使用者權限的聯集。
</div>
......@@ -22,8 +22,6 @@
GlobalSecurityConfiguration.DisplayName=Configure Global Security
GlobalSecurityConfiguration.Description=Secure Jenkins; define who is allowed to access/use the system.
GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-based security
HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=This {0} {1} is new to Jenkins. Would you like to sign up?
LegacyAuthorizationStrategy.DisplayName=Legacy mode
......@@ -56,8 +54,6 @@ LegacySecurityRealm.Displayname=Delegate to servlet container
UserDetailsServiceProxy.UnableToQuery=Unable to query user information: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=Project-based Matrix Authorization Strategy
PAMSecurityRealm.DisplayName=Unix user/group database
PAMSecurityRealm.ReadPermission=Jenkins needs to be able to read /etc/shadow
PAMSecurityRealm.BelongToGroup={0} needs to belong to group {1} to read /etc/shadow
......
......@@ -36,9 +36,7 @@ HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Brugeradministration
HudsonPrivateSecurityRealm.DisplayName=Jenkins''s egen brugerdatabase
PAMSecurityRealm.DisplayName=Unix bruger/gruppe database
AuthorizationStrategy.DisplayName=Alle kan g\u00f8re alt
ProjectMatrixAuthorizationStrategy.DisplayName=Projektbaseret matriceauthentificering
AccessDeniedException2.MissingPermission={0} mangler {1} rettigheden
GlobalMatrixAuthorizationStrategy.DisplayName=Matricebaseret sikkerhed
Permission.Permissions.Title=N/A
LDAPSecurityRealm.UnableToConnect=Kan ikke oprette forbindelse til {0} : {1}
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Indloggede brugere kan g\u00f8re alt
......
......@@ -22,53 +22,48 @@
GlobalSecurityConfiguration.DisplayName=Globale Sicherheit konfigurieren
GlobalSecurityConfiguration.Description=Jenkins absichern und festlegen, wer Zugriff auf das System hat und es benutzen darf.
GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-basierte Sicherheit
LegacyAuthorizationStrategy.DisplayName=Legacy-Autorisierung
HudsonPrivateSecurityRealm.DisplayName=Jenkins' eingebautes Benutzerverzeichnis
HudsonPrivateSecurityRealm.Details.DisplayName=Passwort
HudsonPrivateSecurityRealm.Details.PasswordError=\
Das angegebene Passwort und seine Wiederholung stimmen nicht berein. \
Bitte berprfen Sie Ihre Eingabe.
Das angegebene Passwort und seine Wiederholung stimmen nicht \u00fcberein. \
Bitte \u00fcberpr\u00fcfen Sie Ihre Eingabe.
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Benutzer verwalten
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Anlegen, Aktualisieren und Lschen von Benutzern, die sich an dieser Jenkins-Installation anmelden drfen.
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Anlegen, Aktualisieren und L\u00f6schen von Benutzern, die sich an dieser Jenkins-Installation anmelden d\u00fcrfen.
HudsonPrivateSecurityRealm.CreateAccount.TextNotMatchWordInImage=Text stimmt nicht mit dem Wort im Bild berein
HudsonPrivateSecurityRealm.CreateAccount.PasswordNotMatch=Das angegebene Passwort und seine Wiederholung stimmen nicht berein
HudsonPrivateSecurityRealm.CreateAccount.PasswordRequired=Passwort wird bentigt
HudsonPrivateSecurityRealm.CreateAccount.UserNameRequired=Benutzername wird bentigt
HudsonPrivateSecurityRealm.CreateAccount.InvalidEmailAddress=Ungltige E-Mail Adresse
HudsonPrivateSecurityRealm.CreateAccount.TextNotMatchWordInImage=Text stimmt nicht mit dem Wort im Bild \u00fcberein
HudsonPrivateSecurityRealm.CreateAccount.PasswordNotMatch=Das angegebene Passwort und seine Wiederholung stimmen nicht \u00fcberein
HudsonPrivateSecurityRealm.CreateAccount.PasswordRequired=Passwort wird ben\u00f6tigt
HudsonPrivateSecurityRealm.CreateAccount.UserNameRequired=Benutzername wird ben\u00f6tigt
HudsonPrivateSecurityRealm.CreateAccount.InvalidEmailAddress=Ung\u00fcltige E-Mail Adresse
HudsonPrivateSecurityRealm.CreateAccount.UserNameAlreadyTaken=Benutzername ist bereits vergeben
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Angemeldete Benutzer drfen alle Aktionen ausfhren
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Angemeldete Benutzer d\u00fcrfen alle Aktionen ausf\u00fchren
AuthorizationStrategy.DisplayName=Jeder darf alle Aktionen ausfhren
AuthorizationStrategy.DisplayName=Jeder darf alle Aktionen ausf\u00fchren
LDAPSecurityRealm.DisplayName=LDAP
LDAPSecurityRealm.SyntaxOfServerField=\
Syntax der Server-Angabe ist SERVER, SERVER:PORT oder ldaps://SERVER[:PORT]
LDAPSecurityRealm.UnknownHost=Unbekannter Host: {0}
LDAPSecurityRealm.UnableToConnect=Keine Verbindung zu {0} : {1}
LDAPSecurityRealm.InvalidPortNumber=Ungltige Port-Nummer
LDAPSecurityRealm.InvalidPortNumber=Ung\u00fcltige Port-Nummer
LegacySecurityRealm.Displayname=An Servlet-Container delegieren
UserDetailsServiceProxy.UnableToQuery=Benutzerinformationen konnten nicht abgefragt werden: {0}
PAMSecurityRealm.DisplayName=Unix Benutzer-/Gruppenverzeichnis
PAMSecurityRealm.ReadPermission=Jenkins bentigt Leserechte fr /etc/shadow
PAMSecurityRealm.BelongToGroup={0} mu zu Gruppe {1} gehren, um /etc/shadow lesen zu knnen.
PAMSecurityRealm.ReadPermission=Jenkins ben\u00f6tigt Leserechte f\u00fcr /etc/shadow
PAMSecurityRealm.BelongToGroup={0} mu\u00df zu Gruppe {1} geh\u00f6ren, um /etc/shadow lesen zu k\u00f6nnen.
PAMSecurityRealm.RunAsUserOrBelongToGroupAndChmod=\
Entweder mu Jenkins als {0} ausgefhrt werden, oder {1} mu zu Gruppe {2} gehren und \
''chmod g+r /etc/shadow'' mu ausgefhrt werden, damit Jenkins /etc/shadow lesen kann.
Entweder mu\u00df Jenkins als {0} ausgef\u00fchrt werden, oder {1} mu\u00df zu Gruppe {2} geh\u00f6ren und \
''chmod g+r /etc/shadow'' mu\u00df ausgef\u00fchrt werden, damit Jenkins /etc/shadow lesen kann.
PAMSecurityRealm.Success=Erfolgreich
PAMSecurityRealm.User=Benutzer ''{0}''
PAMSecurityRealm.CurrentUser=Aktueller Benutzer
PAMSecurityRealm.Uid=uid: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=Projektbasierte Matrix-Zugriffssteuerung
# not in use
Permission.Permissions.Title=N/A
AccessDeniedException2.MissingPermission={0} fehlt das Recht ''{1}''
......
......@@ -20,37 +20,34 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalSecurityConfiguration.DisplayName=Configuraci\u00F3n global de la seguridad
GlobalSecurityConfiguration.DisplayName=Configuraci\u00f3n global de la seguridad
GlobalSecurityConfiguration.Description=Seguridad en Jenkins. \
Define qui\u00E9n tiene acceso al sistema (autenticaci\u00F3n) y qu\u00E9 puede hacer (autorizaci\u00F3n)
GlobalMatrixAuthorizationStrategy.DisplayName=Configuracin de seguridad
Define qui\u00e9n tiene acceso al sistema (autenticaci\u00f3n) y qu\u00e9 puede hacer (autorizaci\u00f3n)
LegacyAuthorizationStrategy.DisplayName=Modo ''legacy''
HudsonPrivateSecurityRealm.DisplayName=Usar base de datos de Jenkins
HudsonPrivateSecurityRealm.Details.DisplayName=Contrasea
HudsonPrivateSecurityRealm.Details.DisplayName=Contrase\u00f1a
HudsonPrivateSecurityRealm.Details.PasswordError=\
Las contraseas no coinciden.
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Gestin de usuarios
Las contrase\u00f1as no coinciden.
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Gesti\u00f3n de usuarios
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Crear/borrar/editar usuarios que puedan utilizar Jenkins
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Usuarios autenticados tienen privilegios para todo
AuthorizationStrategy.DisplayName=Cualquiera puede hacer cualquier accin
AuthorizationStrategy.DisplayName=Cualquiera puede hacer cualquier acci\u00f3n
LegacySecurityRealm.Displayname=Delegar seguridad al contenedor de servlets
UserDetailsServiceProxy.UnableToQuery=Imposible obtener la informacin del usuario: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=Estrategia de seguridad para el proyecto
UserDetailsServiceProxy.UnableToQuery=Imposible obtener la informaci\u00f3n del usuario: {0}
# not in use
Permission.Permissions.Title=N/D
AccessDeniedException2.MissingPermission={0} no tiene el permiso {1}
PAMSecurityRealm.DisplayName=Autenticacin basada en usuarios y grupos Unix
PAMSecurityRealm.ReadPermission=Jenkins necesita permisos de lectura del fichero /etc/shadowPAMSecurityRealm.DisplayName=Usar autenticacin Unix: usuario/grupo
PAMSecurityRealm.DisplayName=Autenticaci\u00f3n basada en usuarios y grupos Unix
PAMSecurityRealm.ReadPermission=Jenkins necesita permisos de lectura del fichero /etc/shadowPAMSecurityRealm.DisplayName=Usar autenticaci\u00f3n Unix: usuario/grupo
PAMSecurityRealm.BelongToGroup={0} tiene que pertenecer al grupo {1} para tener acceso de lectura a /etc/shadow
PAMSecurityRealm.RunAsUserOrBelongToGroupAndChmod=\
Es necesario que Jenkins se ejecute como "{0}", o bien "{1}" ha de pertenecer al grupo "{2}" y ejecutar "chmod g+r /etc/shadow" para que Jenkins tenga acceso de lectura a /etc/shadow.
......@@ -63,6 +60,6 @@ LDAPSecurityRealm.DisplayName=LDAP
LDAPSecurityRealm.SyntaxOfServerField=La sintaxis para especificar el servidor es: SERVER o SERVER:PORT o ldaps://SERVER[:PORT]
LDAPSecurityRealm.UnknownHost=Nombre de host desconocido: {0}
LDAPSecurityRealm.UnableToConnect=Incapaz de conectar con {0} : {1}
LDAPSecurityRealm.InvalidPortNumber=El puerto no es vlido
LDAPSecurityRealm.InvalidPortNumber=El puerto no es v\u00e1lido
HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=Este {0} {1} es nuevo en Jenkins. Te gustara crear una nueva cuenta?
HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=Este {0} {1} es nuevo en Jenkins. \u00bfTe gustar\u00eda crear una nueva cuenta?
......@@ -20,33 +20,30 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalSecurityConfiguration.DisplayName=Configurer la s\u00E9curit\u00E9 globale
GlobalSecurityConfiguration.Description=S\u00E9curiser Jenkins; d\u00E9finir qui est autoris\u00E9 \u00E0 acc\u00E9der au syst\u00E8me.
GlobalMatrixAuthorizationStrategy.DisplayName=Scurit base sur une matrice
GlobalSecurityConfiguration.DisplayName=Configurer la s\u00e9curit\u00e9 globale
GlobalSecurityConfiguration.Description=S\u00e9curiser Jenkins; d\u00e9finir qui est autoris\u00e9 \u00e0 acc\u00e9der au syst\u00e8me.
LegacyAuthorizationStrategy.DisplayName=Mode legacy
HudsonPrivateSecurityRealm.DisplayName=Base de donnes des utilisateurs de Jenkins
HudsonPrivateSecurityRealm.DisplayName=Base de donn\u00e9es des utilisateurs de Jenkins
HudsonPrivateSecurityRealm.Details.DisplayName=Mot de passe
HudsonPrivateSecurityRealm.Details.PasswordError=\
Le mot de passe de confirmation n''est pas le mme que le premier mot de passe. \
Merci de vous assurer que les mots de passe sont les mmes dans les deux cases.
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Grer les utilisateurs
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Crer/supprimer/modifier les utilisateurs qui peuvent se logger sur ce serveur Jenkins
Le mot de passe de confirmation n''est pas le m\u00eame que le premier mot de passe. \
Merci de vous assurer que les mots de passe sont les m\u00eames dans les deux cases.
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=G\u00e9rer les utilisateurs
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Cr\u00e9er/supprimer/modifier les utilisateurs qui peuvent se logger sur ce serveur Jenkins
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Les utilisateurs connects peuvent tout faire
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Les utilisateurs connect\u00e9s peuvent tout faire
AuthorizationStrategy.DisplayName=Tout le monde a accs toutes les fonctionnalits
AuthorizationStrategy.DisplayName=Tout le monde a acc\u00e8s \u00e0 toutes les fonctionnalit\u00e9s
LDAPSecurityRealm.DisplayName=LDAP
LegacySecurityRealm.Displayname=Dlguer au conteneur de servlets
LegacySecurityRealm.Displayname=D\u00e9l\u00e9guer au conteneur de servlets
UserDetailsServiceProxy.UnableToQuery=Impossible de rcuprer les informations utilisateur: {0}
UserDetailsServiceProxy.UnableToQuery=Impossible de r\u00e9cup\u00e9rer les informations utilisateur: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=Stratgie d''authorisation matricielle base sur les projets
PAMSecurityRealm.DisplayName=Base de donnes des utilisateurs &amp; des groupes Unix
PAMSecurityRealm.DisplayName=Base de donn\u00e9es des utilisateurs &amp; des groupes Unix
# not in use
Permission.Permissions.Title=N/A
......@@ -21,7 +21,6 @@
# THE SOFTWARE.
GlobalSecurityConfiguration.DisplayName=\u30b0\u30ed\u30fc\u30d0\u30eb\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u8a2d\u5b9a
GlobalSecurityConfiguration.Description=Jenkins\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8ab0\u304c\u30b7\u30b9\u30c6\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3001\u4f7f\u7528\u3067\u304d\u308b\u304b\u306a\u3069\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
GlobalMatrixAuthorizationStrategy.DisplayName=\u884c\u5217\u306b\u3088\u308b\u6a29\u9650\u8a2d\u5b9a
HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=\u3053\u306e{0}\u306e{1}\u306f\u3001Jenkins\u306b\u306f\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b5\u30a4\u30f3\u30a2\u30c3\u30d7\u3057\u307e\u3059\u304b?
LegacyAuthorizationStrategy.DisplayName=\u4e92\u63db\u6027\u30e2\u30fc\u30c9
......@@ -53,8 +52,6 @@ LegacySecurityRealm.Displayname=\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u30b3\u30f3
UserDetailsServiceProxy.UnableToQuery={0}\u306e\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u691c\u7d22\u3067\u304d\u307e\u305b\u3093\u3002
ProjectMatrixAuthorizationStrategy.DisplayName=\u884c\u5217\u306b\u3088\u308b\u6a29\u9650\u8a2d\u5b9a(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5358\u4f4d)
PAMSecurityRealm.DisplayName=Unix \u30e6\u30fc\u30b6\u30fc/\u30b0\u30eb\u30fc\u30d7 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9
PAMSecurityRealm.ReadPermission=Jenkins\u304c/etc/shadow\u3092\u8aad\u307f\u8fbc\u307f\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
PAMSecurityRealm.BelongToGroup=/etc/shadow\u3092\u8aad\u3081\u308b\u3088\u3046\u306b\u3001{0} \u304c\u30b0\u30eb\u30fc\u30d7 {1} \u306b\u5c5e\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
......
......@@ -20,8 +20,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalMatrixAuthorizationStrategy.DisplayName=Matrix-gebaseerde beveiliging
LegacyAuthorizationStrategy.DisplayName=Legacy-mode
HudsonPrivateSecurityRealm.Details.DisplayName=Paswoord
......
......@@ -20,14 +20,12 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalMatrixAuthorizationStrategy.DisplayName=Seguran\u00E7a baseada em matriz
LegacyAuthorizationStrategy.DisplayName=Modo legado
HudsonPrivateSecurityRealm.Details.DisplayName=Senha
HudsonPrivateSecurityRealm.Details.PasswordError=A senha confirmada n\u00E3o \u00E9 igual a senha informada. Por favor assegure-se de digitar a mesma senha duas vezes.
HudsonPrivateSecurityRealm.Details.PasswordError=A senha confirmada n\u00e3o \u00e9 igual a senha informada. Por favor assegure-se de digitar a mesma senha duas vezes.
UserDetailsServiceProxy.UnableToQuery=N\u00E3o foi poss\u00EDvel buscar informa\u00E7\u00F5es do usu\u00E1rio\: {0}
UserDetailsServiceProxy.UnableToQuery=N\u00e3o foi poss\u00edvel buscar informa\u00e7\u00f5es do usu\u00e1rio\: {0}
# not in use
Permission.Permissions.Title=N/A
......@@ -36,32 +34,30 @@ PAMSecurityRealm.Success=Sucesso
# Unable to connect to {0} : {1}
LDAPSecurityRealm.UnableToConnect=Incapaz de conectar {0} : {1}
# Logged-in users can do anything
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Usu\u00E1rios logados n\u00E3o conseguem fazer nada
FullControlOnceLoggedInAuthorizationStrategy.DisplayName=Usu\u00e1rios logados n\u00e3o conseguem fazer nada
# Unix user/group database
PAMSecurityRealm.DisplayName=Usu\u00E1rio Uniz / grupo banco da dados
PAMSecurityRealm.DisplayName=Usu\u00e1rio Uniz / grupo banco da dados
# User ''{0}''
PAMSecurityRealm.User=Usu\u00E1rio ''{0}''
PAMSecurityRealm.User=Usu\u00e1rio ''{0}''
# {0} needs to belong to group {1} to read /etc/shadow
PAMSecurityRealm.BelongToGroup= {0} precisa pertencer ao grupo {1} para ler /etc/shadow
# Anyone can do anything
AuthorizationStrategy.DisplayName=Ninguem consegue fazer nada
# Project-based Matrix Authorization Strategy
#ProjectMatrixAuthorizationStrategy.DisplayName=
# Invalid port number
LDAPSecurityRealm.InvalidPortNumber=N\u00FAmero de porta inv\u00E1lido
LDAPSecurityRealm.InvalidPortNumber=N\u00famero de porta inv\u00e1lido
# Unknown host: {0}
LDAPSecurityRealm.UnknownHost=Host n\u00E3o localizado {0}
LDAPSecurityRealm.UnknownHost=Host n\u00e3o localizado {0}
# uid: {0}
PAMSecurityRealm.Uid=uid: {0}
# \
# Either Jenkins needs to run as {0} or {1} needs to belong to group {2} and ''chmod g+r /etc/shadow'' needs to be done to enable Jenkins to read /etc/shadow
PAMSecurityRealm.RunAsUserOrBelongToGroupAndChmod=Jenkins precisa pertencer ao grupo {2} e ter acesso ''chmod g+r /etc/shadow'' para ler a pasta.
# Current User
PAMSecurityRealm.CurrentUser=Usu\u00E1rio atual
PAMSecurityRealm.CurrentUser=Usu\u00e1rio atual
# {0} is missing the {1} permission
AccessDeniedException2.MissingPermission= {0} est\u00E1 faltando a permiss\u00E3o {1}
AccessDeniedException2.MissingPermission= {0} est\u00e1 faltando a permiss\u00e3o {1}
# Manage Users
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Gerenciar usu\u00E1rios
HudsonPrivateSecurityRealm.ManageUserLinks.DisplayName=Gerenciar usu\u00e1rios
# Delegate to servlet container
LegacySecurityRealm.Displayname=Delegar para o container servlet
# LDAP
......@@ -71,6 +67,6 @@ HudsonPrivateSecurityRealm.DisplayName=Base de dados interna do Jenkins
# Jenkins needs to be able to read /etc/shadow
PAMSecurityRealm.ReadPermission=Jenkins precisa de acesso de leitura em /etc/shadow
# Create/delete/modify users that can log in to this Jenkins
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Criar/deletar/modificar usu\u00E1rios que logan no Jenkins
HudsonPrivateSecurityRealm.ManageUserLinks.Description=Criar/deletar/modificar usu\u00e1rios que logan no Jenkins
# Syntax of server field is SERVER or SERVER:PORT or ldaps://SERVER[:PORT]
LDAPSecurityRealm.SyntaxOfServerField=Sintaxe SERVER or SERVER:PORT or ldaps://SERVER[:PORT]
......@@ -20,8 +20,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalMatrixAuthorizationStrategy.DisplayName=\u041c\u0430\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432
LegacyAuthorizationStrategy.DisplayName="\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439" \u0440\u0435\u0436\u0438\u043c
HudsonPrivateSecurityRealm.Details.DisplayName=\u041f\u0430\u0440\u043e\u043b\u044c
......
......@@ -20,8 +20,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalMatrixAuthorizationStrategy.DisplayName=Matris-temelli G\u00fcvenlik
LegacyAuthorizationStrategy.DisplayName=Miras modu
HudsonPrivateSecurityRealm.Details.DisplayName=\u015fifre
......
......@@ -20,8 +20,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
GlobalMatrixAuthorizationStrategy.DisplayName=\u5b89\u5168\u77e9\u9635
LegacyAuthorizationStrategy.DisplayName=\u9057\u7559\u6a21\u5f0f
HudsonPrivateSecurityRealm.DisplayName=Jenkins\u4e13\u6709\u7528\u6237\u6570\u636e\u5e93
......@@ -46,8 +44,6 @@ LegacySecurityRealm.Displayname=Servlet\u5bb9\u5668\u4ee3\u7406
UserDetailsServiceProxy.UnableToQuery=\u6ca1\u6709\u68c0\u7d22\u5230\u8fd9\u4e2a\u7528\u6237\u4fe1\u606f: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=\u9879\u76ee\u77e9\u9635\u6388\u6743\u7b56\u7565
PAMSecurityRealm.DisplayName=Unix\u7528\u6237/\u7ec4\u6570\u636e\u5e93
PAMSecurityRealm.ReadPermission=Jenkins\u9700\u8981\u6709/etc/shadow\u8bfb\u7684\u6743\u9650
PAMSecurityRealm.BelongToGroup={0}\u5fc5\u987b\u5c5e\u4e8e{1}\u7ec4\u6765\u8bfb\u53d6/etc/shadow
......
......@@ -23,8 +23,6 @@
GlobalSecurityConfiguration.DisplayName=\u8a2d\u5b9a\u5168\u57df\u5b89\u5168\u6027
GlobalSecurityConfiguration.Description=\u4fdd\u8b77 Jenkins\uff0c\u5b9a\u7fa9\u8ab0\u53ef\u4ee5\u5b58\u53d6\u6216\u662f\u4f7f\u7528\u7cfb\u7d71\u3002
GlobalMatrixAuthorizationStrategy.DisplayName=\u77e9\u9663\u578b\u5b89\u5168\u6027
HudsonPrivateSecurityRealm.WouldYouLikeToSignUp=Jenkins \u4e0d\u8a8d\u5f97 {0} {1}\u3002\u60a8\u8981\u8a3b\u518a\u55ce?
LegacyAuthorizationStrategy.DisplayName=\u820a\u7248\u6a21\u5f0f
......@@ -57,8 +55,6 @@ LegacySecurityRealm.Displayname=\u59d4\u6d3e\u7d66 Servlet Container
UserDetailsServiceProxy.UnableToQuery=\u7121\u6cd5\u67e5\u8a62\u4f7f\u7528\u8005\u8cc7\u8a0a: {0}
ProjectMatrixAuthorizationStrategy.DisplayName=\u5c08\u6848\u578b\u77e9\u9663\u6388\u6b0a\u7b56\u7565
PAMSecurityRealm.DisplayName=Unix \u4f7f\u7528\u8005\u3001\u7fa4\u7d44\u8cc7\u6599\u5eab
PAMSecurityRealm.ReadPermission=Jenkins \u8981\u80fd\u8b80\u53d6 /etc/shadow
PAMSecurityRealm.BelongToGroup={0} \u8981\u5728 {1} \u7fa4\u7d44\u88e1\uff0c\u4ee5\u4fbf\u8b80\u53d6 /etc/shadow
......
<div>
This mode is an extension to "Matrix-based security" that allows additional ACL matrix to be defined
for each project separately (which is done on the job configuration screen.)
<p>
This allows you to say things like "Joe can access project A, B, and C but he can't see D."
See the help of "Matrix-based security" for the concept of matrix-based security in general.
<p>
ACLs are additive, so the access rights granted below will be effective for all the projects.
</div>
<div>
Dieser Modus erweitert die "Matrix-basierte Sicherheit" um eine zusätzliche ACL-Rechtematrix,
die für jedes Projekt individuell festgelegt werden kann (in der Konfigurationsmaske des jeweiligen Jobs).
<p>
Dies erlaubt Ihnen eine Rechtevergabe wie z.B. "Joe darf auf Projekt A, B und C zugreifen - er
soll aber Projekt D nicht sehen dürfen". Lesen Sie den Hilfetext bei "Matrix-basierte Sicherheit",
um mehr über das Konzept der matrix-basierten Sicherheit im Allgemeinen zu erfahren.
<p>
ACL-Rechte sind additiv. Dies bedeutet, dass die untenstehend erteilten Rechte für alle
Projekte als erteilt gelten.
</div>
<div>
"行列による権限設定"の拡張し、プロジェクト毎に行列による権限設定することができます(ジョブの設定画面で行います)。
<p>
例えば、"JoeはプロジェクトA、B、Cにアクセスできるが、Dは参照できない"といったことができます。
行列による権限設定のコンセプトについては、"行列による権限設定"のヘルプを参照してください。
<p>
ここで設定した権限は、すべてのプロジェクトの権限に追加されます。
</div>
<div>
这个授权模型扩展自"安全矩阵",允许把下面的ACL(访问控制列表)矩阵附加到每个项目定义中(在Job配置页面).
<p>
这允许你宣布类似这样的声明"约翰能够访问A,B和C,但是不能访问D." 查看"安全矩阵"的帮助文档来了解安全矩阵.
<p>
ACL配置是追加的,就是说下面的访问控制会追加到所有的项目配置中。
</div>
<div>
這是「矩陣型安全性」的擴充,可以分別對專案定義額外的存取控制清單 (ACL) 矩陣
(在作業設定畫面裡調整)。
<p>
讓您能做到「Joe 可以看到 A, B, C 專案,但是看不到 D」這種程度的設定。
可以看看「矩陣型安全性」的說明,了解矩陣型安全性的基本概念。
<p>
ACL 會逐一累加,所以下列授與的存取權限會影響到每一個專案。
</div>
......@@ -81,6 +81,11 @@ THE SOFTWARE.
<artifactId>mailer</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-auth</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
......
......@@ -338,6 +338,12 @@ THE SOFTWARE.
<version>1.5</version>
<type>hpi</type>
</artifactItem>
<artifactItem>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-auth</artifactId>
<version>1.0</version>
<type>hpi</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/plugins</outputDirectory>
<stripVersion>true</stripVersion>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册