mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Ticket #269: Partial fix of the most immediately apparent (upon login) query errors. Need to rework queries.
This commit is contained in:
@@ -39,6 +39,7 @@ import com.google.common.collect.Lists;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -684,18 +685,30 @@ public class PermissionCheckUtility {
|
|||||||
* @return the list of all connections this user has access to
|
* @return the list of all connections this user has access to
|
||||||
*/
|
*/
|
||||||
private Set<MySQLConnection> getConnections(int userID, String permissionType) {
|
private Set<MySQLConnection> getConnections(int userID, String permissionType) {
|
||||||
|
|
||||||
|
// If connections available, query them
|
||||||
Set<Integer> affectedConnectionIDs = getConnectionIDs(userID, permissionType);
|
Set<Integer> affectedConnectionIDs = getConnectionIDs(userID, permissionType);
|
||||||
ConnectionExample example = new ConnectionExample();
|
if (!affectedConnectionIDs.isEmpty()) {
|
||||||
example.createCriteria().andConnection_idIn(Lists.newArrayList(affectedConnectionIDs));
|
|
||||||
List<Connection> connectionDBOjects = connectionDAO.selectByExample(example);
|
// Query available connections
|
||||||
Set<MySQLConnection> affectedConnections = new HashSet<MySQLConnection>();
|
ConnectionExample example = new ConnectionExample();
|
||||||
for(Connection affectedConnection : connectionDBOjects) {
|
example.createCriteria().andConnection_idIn(Lists.newArrayList(affectedConnectionIDs));
|
||||||
MySQLConnection mySQLConnection = mySQLConnectionProvider.get();
|
List<Connection> connectionDBOjects = connectionDAO.selectByExample(example);
|
||||||
mySQLConnection.init(affectedConnection);
|
|
||||||
affectedConnections.add(mySQLConnection);
|
// Add connections to final set
|
||||||
|
Set<MySQLConnection> affectedConnections = new HashSet<MySQLConnection>();
|
||||||
|
for(Connection affectedConnection : connectionDBOjects) {
|
||||||
|
MySQLConnection mySQLConnection = mySQLConnectionProvider.get();
|
||||||
|
mySQLConnection.init(affectedConnection);
|
||||||
|
affectedConnections.add(mySQLConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
return affectedConnections;
|
||||||
}
|
}
|
||||||
|
|
||||||
return affectedConnections;
|
// Otherwise, no connections available
|
||||||
|
return Collections.EMPTY_SET;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -795,62 +808,79 @@ public class PermissionCheckUtility {
|
|||||||
public Set<Permission> getAllPermissions(int userID) {
|
public Set<Permission> getAllPermissions(int userID) {
|
||||||
Set<Permission> allPermissions = new HashSet<Permission>();
|
Set<Permission> allPermissions = new HashSet<Permission>();
|
||||||
|
|
||||||
// first, user permissions
|
// First, user permissions
|
||||||
UserPermissionExample userPermissionExample = new UserPermissionExample();
|
UserPermissionExample userPermissionExample = new UserPermissionExample();
|
||||||
userPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
userPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
||||||
List<UserPermissionKey> userPermissions = userPermissionDAO.selectByExample(userPermissionExample);
|
List<UserPermissionKey> userPermissions =
|
||||||
List<Integer> affectedUserIDs = new ArrayList<Integer>();
|
userPermissionDAO.selectByExample(userPermissionExample);
|
||||||
for(UserPermissionKey userPermission : userPermissions) {
|
|
||||||
affectedUserIDs.add(userPermission.getAffected_user_id());
|
// If user permissions present, add permissions
|
||||||
|
if (!userPermissions.isEmpty()) {
|
||||||
|
|
||||||
|
// Get list of affected user IDs
|
||||||
|
List<Integer> affectedUserIDs = new ArrayList<Integer>();
|
||||||
|
for(UserPermissionKey userPermission : userPermissions)
|
||||||
|
affectedUserIDs.add(userPermission.getAffected_user_id());
|
||||||
|
|
||||||
|
// Query all affected users, store in map indexed by user ID
|
||||||
|
UserExample userExample = new UserExample();
|
||||||
|
userExample.createCriteria().andUser_idIn(affectedUserIDs);
|
||||||
|
List<User> users = userDAO.selectByExample(userExample);
|
||||||
|
Map<Integer, User> userMap = new HashMap<Integer, User>();
|
||||||
|
for(User user : users)
|
||||||
|
userMap.put(user.getUser_id(), user);
|
||||||
|
|
||||||
|
// Add user permissions
|
||||||
|
for(UserPermissionKey userPermission : userPermissions) {
|
||||||
|
User affectedUser = userMap.get(userPermission.getAffected_user_id());
|
||||||
|
UserPermission newPermission = new UserPermission(
|
||||||
|
UserPermission.Type.valueOf(userPermission.getPermission()),
|
||||||
|
affectedUser.getUsername()
|
||||||
|
);
|
||||||
|
allPermissions.add(newPermission);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UserExample userExample = new UserExample();
|
// Secondly, connection permissions
|
||||||
userExample.createCriteria().andUser_idIn(affectedUserIDs);
|
|
||||||
List<User> users = userDAO.selectByExample(userExample);
|
|
||||||
Map<Integer, User> userMap = new HashMap<Integer, User>();
|
|
||||||
for(User user : users) {
|
|
||||||
userMap.put(user.getUser_id(), user);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(UserPermissionKey userPermission : userPermissions) {
|
|
||||||
User affectedUser = userMap.get(userPermission.getAffected_user_id());
|
|
||||||
UserPermission newPermission = new UserPermission(
|
|
||||||
UserPermission.Type.valueOf(userPermission.getPermission()),
|
|
||||||
affectedUser.getUsername()
|
|
||||||
);
|
|
||||||
allPermissions.add(newPermission);
|
|
||||||
}
|
|
||||||
|
|
||||||
//secondly, connection permissions
|
|
||||||
ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample();
|
ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample();
|
||||||
connectionPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
connectionPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
||||||
List<ConnectionPermissionKey> connectionPermissions = connectionPermissionDAO.selectByExample(connectionPermissionExample);
|
List<ConnectionPermissionKey> connectionPermissions =
|
||||||
List<Integer> affectedConnectionIDs = new ArrayList<Integer>();
|
connectionPermissionDAO.selectByExample(connectionPermissionExample);
|
||||||
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
|
|
||||||
affectedConnectionIDs.add(connectionPermission.getConnection_id());
|
// If connection permissions present, add permissions
|
||||||
|
if (!connectionPermissions.isEmpty()) {
|
||||||
|
|
||||||
|
// Get list of affected connection IDs
|
||||||
|
List<Integer> affectedConnectionIDs = new ArrayList<Integer>();
|
||||||
|
for(ConnectionPermissionKey connectionPermission : connectionPermissions)
|
||||||
|
affectedConnectionIDs.add(connectionPermission.getConnection_id());
|
||||||
|
|
||||||
|
// Query connections, store in map indexed by connection ID
|
||||||
|
ConnectionExample connectionExample = new ConnectionExample();
|
||||||
|
connectionExample.createCriteria().andConnection_idIn(affectedConnectionIDs);
|
||||||
|
List<Connection> connections = connectionDAO.selectByExample(connectionExample);
|
||||||
|
Map<Integer, Connection> connectionMap = new HashMap<Integer, Connection>();
|
||||||
|
for(Connection connection : connections)
|
||||||
|
connectionMap.put(connection.getConnection_id(), connection);
|
||||||
|
|
||||||
|
// Add connection permissions
|
||||||
|
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
|
||||||
|
Connection affectedConnection = connectionMap.get(connectionPermission.getConnection_id());
|
||||||
|
ConnectionPermission newPermission = new ConnectionPermission(
|
||||||
|
ConnectionPermission.Type.valueOf(connectionPermission.getPermission()),
|
||||||
|
affectedConnection.getConnection_name()
|
||||||
|
);
|
||||||
|
allPermissions.add(newPermission);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectionExample connectionExample = new ConnectionExample();
|
// And finally, system permissions
|
||||||
connectionExample.createCriteria().andConnection_idIn(affectedConnectionIDs);
|
|
||||||
List<Connection> connections = connectionDAO.selectByExample(connectionExample);
|
|
||||||
Map<Integer, Connection> connectionMap = new HashMap<Integer, Connection>();
|
|
||||||
for(Connection connection : connections) {
|
|
||||||
connectionMap.put(connection.getConnection_id(), connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
|
|
||||||
Connection affectedConnection = connectionMap.get(connectionPermission.getConnection_id());
|
|
||||||
ConnectionPermission newPermission = new ConnectionPermission(
|
|
||||||
ConnectionPermission.Type.valueOf(connectionPermission.getPermission()),
|
|
||||||
affectedConnection.getConnection_name()
|
|
||||||
);
|
|
||||||
allPermissions.add(newPermission);
|
|
||||||
}
|
|
||||||
|
|
||||||
//and finally, system permissions
|
|
||||||
SystemPermissionExample systemPermissionExample = new SystemPermissionExample();
|
SystemPermissionExample systemPermissionExample = new SystemPermissionExample();
|
||||||
systemPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
systemPermissionExample.createCriteria().andUser_idEqualTo(userID);
|
||||||
List<SystemPermissionKey> systemPermissions = systemPermissionDAO.selectByExample(systemPermissionExample);
|
List<SystemPermissionKey> systemPermissions =
|
||||||
|
systemPermissionDAO.selectByExample(systemPermissionExample);
|
||||||
for(SystemPermissionKey systemPermission : systemPermissions) {
|
for(SystemPermissionKey systemPermission : systemPermissions) {
|
||||||
SystemPermission newPermission = null;
|
SystemPermission newPermission = null;
|
||||||
if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_USER_CREATE))
|
if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_USER_CREATE))
|
||||||
|
Reference in New Issue
Block a user