X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fauth%2FSystemRole.java;h=646752d412f988d7ba3ddb60e05edcff7e0f5b67;hb=e023e9027edc0d734d11cb759259eaebb6d68bc9;hp=5d62d9803f08a3eb033cd929949c505bab92f679;hpb=1894ef7613f658b8b0d8104a108d92b756c0cdb3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/auth/SystemRole.java b/org.argeo.cms/src/org/argeo/cms/auth/SystemRole.java index 5d62d9803..646752d41 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/SystemRole.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/SystemRole.java @@ -8,13 +8,27 @@ import javax.xml.namespace.QName; import org.argeo.api.cms.CmsConstants; import org.argeo.cms.internal.auth.ImpliedByPrincipal; +/** A programmatic role. */ public interface SystemRole { QName getName(); + /** Whether this role is implied for this authenticated user. */ default boolean implied(Subject subject, String context) { return implied(getName(), subject, context); } + /** Whether this role is implied for this distinguished name. */ + default boolean implied(String dn, String context) { + String roleContext = RoleNameUtils.getContext(dn); + QName roleName = RoleNameUtils.getLastRdnAsName(dn); + return roleContext.equalsIgnoreCase(context) && getName().equals(roleName); + } + + /** + * Whether this role is implied for this authenticated subject. If context is + * null, it is not considered; this should be used to build user + * interfaces, but not to authorise. + */ static boolean implied(QName name, Subject subject, String context) { Set roles = subject.getPrincipals(ImpliedByPrincipal.class); for (ImpliedByPrincipal role : roles) { @@ -30,6 +44,5 @@ public interface SystemRole { } } return false; - } }