diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/ObjectPermissionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/ObjectPermissionService.java index 79ce6407e..4e3beb0e1 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/ObjectPermissionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/ObjectPermissionService.java @@ -185,9 +185,8 @@ public abstract class ObjectPermissionService ModeledUser targetUser, ObjectPermission.Type type, String identifier) throws GuacamoleException { - // Only an admin can read permissions that aren't his own - if (user.getUser().getIdentifier().equals(targetUser.getIdentifier()) - || user.getUser().isAdministrator()) { + // Retrieve permissions only if allowed + if (canReadPermissions(user, targetUser)) { // Read permission from database, return null if not found ObjectPermissionModel model = getPermissionMapper().selectOne(targetUser.getModel(), type, identifier); @@ -237,14 +236,11 @@ public abstract class ObjectPermissionService if (identifiers.isEmpty()) return identifiers; - // Determine whether the user is an admin - boolean isAdmin = user.getUser().isAdministrator(); - - // Only an admin can read permissions that aren't his own - if (isAdmin || user.getUser().getIdentifier().equals(targetUser.getIdentifier())) { + // Retrieve permissions only if allowed + if (canReadPermissions(user, targetUser)) { // If user is an admin, everything is accessible - if (isAdmin) + if (user.getUser().isAdministrator()) return identifiers; // Otherwise, return explicitly-retrievable identifiers diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/PermissionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/PermissionService.java index 3207ffc8d..b4c35ba5e 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/PermissionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/glyptodon/guacamole/auth/jdbc/permission/PermissionService.java @@ -30,6 +30,8 @@ import org.glyptodon.guacamole.auth.jdbc.user.AuthenticatedUser; import org.glyptodon.guacamole.auth.jdbc.user.ModeledUser; import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleSecurityException; +import org.glyptodon.guacamole.net.auth.permission.ObjectPermission; +import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet; import org.glyptodon.guacamole.net.auth.permission.Permission; import org.glyptodon.guacamole.net.auth.permission.PermissionSet; @@ -141,6 +143,42 @@ public abstract class PermissionService retrievePermissions(AuthenticatedUser user, ModeledUser targetUser) throws GuacamoleException { - // Only an admin can read permissions that aren't his own - if (user.getUser().getIdentifier().equals(targetUser.getIdentifier()) - || user.getUser().isAdministrator()) + // Retrieve permissions only if allowed + if (canReadPermissions(user, targetUser)) return getPermissionInstances(getPermissionMapper().select(targetUser.getModel())); // User cannot read this user's permissions