Can check string-based roles
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / SystemRole.java
index 933f80a95bc154a282fa5dfb0a37e831420296b2..5d62d9803f08a3eb033cd929949c505bab92f679 100644 (file)
@@ -12,10 +12,17 @@ public interface SystemRole {
        QName getName();
 
        default boolean implied(Subject subject, String context) {
+               return implied(getName(), subject, context);
+       }
+
+       static boolean implied(QName name, Subject subject, String context) {
                Set<ImpliedByPrincipal> roles = subject.getPrincipals(ImpliedByPrincipal.class);
                for (ImpliedByPrincipal role : roles) {
                        if (role.isSystemRole()) {
-                               if (role.getRoleName().equals(getName())) {
+                               if (role.getRoleName().equals(name)) {
+                                       // !! if context is not specified, it is considered irrelevant
+                                       if (context == null)
+                                               return true;
                                        if (role.getContext().equalsIgnoreCase(context)
                                                        || role.getContext().equals(CmsConstants.NODE_BASEDN))
                                                return true;
@@ -23,6 +30,6 @@ public interface SystemRole {
                        }
                }
                return false;
-       }
 
+       }
 }