提交 2c168042 编写于 作者: S StevenGBrown

[FIXED HUDSON-7138] GlobalMatrixAuthorizationStrategy (and...

[FIXED HUDSON-7138] GlobalMatrixAuthorizationStrategy (and ProjectMatrixAuthorizationStrategy since it subclasses the Converter) now sorts the permissions before persisting them.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@33594 71c3de6d-444a-0410-be80-ed276b4c234a
上级 d2da301f
......@@ -58,6 +58,9 @@ 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.
......@@ -197,9 +200,14 @@ public class GlobalMatrixAuthorizationStrategy extends AuthorizationStrategy {
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
GlobalMatrixAuthorizationStrategy strategy = (GlobalMatrixAuthorizationStrategy)source;
for (Entry<Permission, Set<String>> e : strategy.grantedPermissions.entrySet()) {
// 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();
for (String sid : e.getValue()) {
List<String> sids = new ArrayList<String>(e.getValue());
Collections.sort(sids);
for (String sid : sids) {
writer.startNode("permission");
writer.setValue(p+':'+sid);
writer.endNode();
......
......@@ -27,6 +27,7 @@ import hudson.model.*;
import net.sf.json.util.JSONUtils;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
......@@ -42,6 +43,21 @@ import org.jvnet.localizer.Localizable;
* @see http://hudson.gotdns.com/wiki/display/HUDSON/Making+your+plugin+behave+in+secured+Hudson
*/
public final class Permission {
/**
* Comparator that orders {@link Permission} objects based on their ID.
*/
public static final Comparator<Permission> ID_COMPARATOR = new Comparator<Permission>() {
/**
* {@inheritDoc}
*/
@Override
public int compare(Permission one, Permission two) {
return one.getId().compareTo(two.getId());
}
};
public final Class owner;
public final PermissionGroup group;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册