diff --git a/api/src/org/labkey/api/security/User.java b/api/src/org/labkey/api/security/User.java index 70849d2320f..edc32e8e2ae 100644 --- a/api/src/org/labkey/api/security/User.java +++ b/api/src/org/labkey/api/security/User.java @@ -35,6 +35,7 @@ import org.labkey.api.security.permissions.BrowserDeveloperPermission; import org.labkey.api.security.permissions.ImpersonatePermission; import org.labkey.api.security.permissions.DeletePermission; +import org.labkey.api.security.permissions.ImpersonatePrivilegedSiteRolesPermission; import org.labkey.api.security.permissions.InsertPermission; import org.labkey.api.security.permissions.Permission; import org.labkey.api.security.permissions.PlatformDeveloperPermission; @@ -592,9 +593,11 @@ public static JSONObject getUserProps(User user, User currentUser, @Nullable Con props.put("canDelete", nonNullContainer && container.hasPermission(user, DeletePermission.class)); props.put("canDeleteOwn", nonNullContainer && container.hasPermission(user, DeletePermission.class)); props.put("isAdmin", nonNullContainer && container.hasPermission(user, AdminPermission.class)); - props.put("isRootAdmin", user.hasRootAdminPermission()); - props.put("isSystemAdmin", user.hasSiteAdminPermission()); - props.put("canImpersonateSiteRoles", user.hasRootPermission(ImpersonatePermission.class)); + props.put("isRootAdmin", user.hasRootAdminPermission()); // Site Admin or App Admin + props.put("isSystemAdmin", user.hasSiteAdminPermission()); // @Deprecated, use isSiteAdmin instead. TODO: Eliminate usages and remove + props.put("isSiteAdmin", user.hasSiteAdminPermission()); // Just Site Admin + props.put("canImpersonateSiteRoles", user.hasRootPermission(ImpersonatePermission.class)); // Site Admin, App Admin, or Impersonating Troubleshooter + props.put("canImpersonatePrivilegedRoles", user.hasRootPermission(ImpersonatePrivilegedSiteRolesPermission.class)); props.put("isGuest", user.isGuest()); props.put("isDeveloper", user.isBrowserDev()); props.put("isAnalyst", user.hasRootPermission(AnalystPermission.class)); diff --git a/core/webapp/Impersonate.js b/core/webapp/Impersonate.js index 1bd300291b8..626b8f43545 100644 --- a/core/webapp/Impersonate.js +++ b/core/webapp/Impersonate.js @@ -34,15 +34,15 @@ Ext4.define('LABKEY.Security.ImpersonateUser', { }, getPanel: function(){ - var instructions = LABKEY.Security.currentUser.isRootAdmin ? - "As a site administrator, application administrator, or impersonating troubleshooter, you can impersonate any user on the site." + - (!LABKEY.Security.currentUser.isSystemAdmin ? " While impersonating you will not inherit the user's " - + "site-level roles (e.g., Site Administrator, Developer)." : "") : + const instructions = LABKEY.Security.currentUser.canImpersonateSiteRoles ? + "As " + getRootAdminRole(LABKEY.Security.currentUser) + ", you can impersonate any user on the site." + + (!LABKEY.Security.currentUser.canImpersonatePrivilegedRoles ? " While impersonating, you will not inherit the user's " + + "privileged roles (e.g., Site Administrator, Platform Developer)." : "") : - "As a project administrator, you can impersonate any project user within this project. While impersonating you will be " + - "restricted to this project and will not inherit the user's site-level roles (e.g., Site Administrator, Developer)."; + "As a Project Administrator, you can impersonate any project user within this project. While impersonating, you will be " + + "restricted to this project and will not inherit the user's privileged roles (e.g., Site Administrator, Platform Developer)."; - var divContainer = Ext4.create('Ext.container.Container', { + const divContainer = Ext4.create('Ext.container.Container', { html: "