X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAggregatingAuthorization.java;fp=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAggregatingAuthorization.java;h=f270b8d89822bafa4db4a730fe3da9e07fb18751;hb=10b1584cd1e3550ecdd1d35dded9c4266d1cb4d8;hp=0000000000000000000000000000000000000000;hpb=3ed9597f6dc8790fabcd60310e7adb2e8b1f13e2;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/AggregatingAuthorization.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/AggregatingAuthorization.java new file mode 100644 index 000000000..f270b8d89 --- /dev/null +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/AggregatingAuthorization.java @@ -0,0 +1,73 @@ +package org.argeo.osgi.useradmin; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import javax.security.auth.x500.X500Principal; + +import org.osgi.service.useradmin.Authorization; + +class AggregatingAuthorization implements Authorization { + private final String name; + private final String displayName; + private final List systemRoles; + private final List roles; + + public AggregatingAuthorization(String name, String displayName, + Collection systemRoles, String[] roles) { + this.name = new X500Principal(name).getName(); + this.displayName = displayName; + this.systemRoles = Collections.unmodifiableList(new ArrayList( + systemRoles)); + this.roles = Collections.unmodifiableList(Arrays.asList(roles)); + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean hasRole(String name) { + if (systemRoles.contains(name)) + return true; + if (roles.contains(name)) + return true; + return false; + } + + @Override + public String[] getRoles() { + int size = systemRoles.size() + roles.size(); + List res = new ArrayList(size); + res.addAll(systemRoles); + res.addAll(roles); + return res.toArray(new String[size]); + } + + @Override + public int hashCode() { + if (name == null) + return super.hashCode(); + return name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Authorization)) + return false; + Authorization that = (Authorization) obj; + if (name == null) + return that.getName() == null; + return name.equals(that.getName()); + } + + @Override + public String toString() { + return displayName; + } + +}