X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fauth%2FCurrentUser.java;h=16ac638c107a943422e84a059b0a79414f68e54f;hb=25316bb35087da302a0916c1e0bdf2fc09e8feb0;hp=b43bf98b5f707744591b26006535ca784d8252b7;hpb=279880f110272df643cee670aa976ae5ab9ec396;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java index b43bf98b5..16ac638c1 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java @@ -6,6 +6,7 @@ import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.HashSet; +import java.util.Iterator; import java.util.Locale; import java.util.Set; import java.util.UUID; @@ -70,6 +71,11 @@ public final class CurrentUser { return roles.contains(role); } + /** Implies this {@link SystemRole} in this context. */ + public final static boolean implies(SystemRole role, String context) { + return role.implied(currentSubject(), context); + } + /** Executes as the current user */ public final static T doAs(PrivilegedAction action) { return Subject.doAs(currentSubject(), action); @@ -125,7 +131,12 @@ public final class CurrentUser { public static CmsSession getCmsSession() { Subject subject = currentSubject(); - CmsSessionId cmsSessionId = subject.getPrivateCredentials(CmsSessionId.class).iterator().next(); + Iterator it = subject.getPrivateCredentials(CmsSessionId.class).iterator(); + if (!it.hasNext()) + throw new IllegalStateException("No CMS session id available for " + subject); + CmsSessionId cmsSessionId = it.next(); + if (it.hasNext()) + throw new IllegalStateException("More than one CMS session id available for " + subject); return CmsContextImpl.getCmsContext().getCmsSessionByUuid(cmsSessionId.getUuid()); } @@ -165,8 +176,8 @@ public final class CurrentUser { } /* - * PREPARE EVOLUTION OF JAVA APIs INTRODUCED IN JDK 18 - * The following static methods will be added to Subject + * PREPARE EVOLUTION OF JAVA APIs INTRODUCED IN JDK 18 The following static + * methods will be added to Subject */ public Subject current() { return currentSubject();