Ticket #269: Partial fix of the most immediately apparent (upon login) query errors. Need to rework queries.

This commit is contained in:
Michael Jumper
2013-02-25 02:37:43 -08:00
parent 97c2e3ceb9
commit 73641925fc

View File

@@ -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))