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.Provider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -684,10 +685,17 @@ public class PermissionCheckUtility {
* @return the list of all connections this user has access to
*/
private Set<MySQLConnection> getConnections(int userID, String permissionType) {
// If connections available, query them
Set<Integer> affectedConnectionIDs = getConnectionIDs(userID, permissionType);
if (!affectedConnectionIDs.isEmpty()) {
// Query available connections
ConnectionExample example = new ConnectionExample();
example.createCriteria().andConnection_idIn(Lists.newArrayList(affectedConnectionIDs));
List<Connection> connectionDBOjects = connectionDAO.selectByExample(example);
// Add connections to final set
Set<MySQLConnection> affectedConnections = new HashSet<MySQLConnection>();
for(Connection affectedConnection : connectionDBOjects) {
MySQLConnection mySQLConnection = mySQLConnectionProvider.get();
@@ -698,6 +706,11 @@ public class PermissionCheckUtility {
return affectedConnections;
}
// Otherwise, no connections available
return Collections.EMPTY_SET;
}
/**
* Find the list of the IDs of all connections a user has permission to.
* The access type is defined by permissionType.
@@ -795,23 +808,29 @@ public class PermissionCheckUtility {
public Set<Permission> getAllPermissions(int userID) {
Set<Permission> allPermissions = new HashSet<Permission>();
// first, user permissions
// First, user permissions
UserPermissionExample userPermissionExample = new UserPermissionExample();
userPermissionExample.createCriteria().andUser_idEqualTo(userID);
List<UserPermissionKey> userPermissions = userPermissionDAO.selectByExample(userPermissionExample);
List<Integer> affectedUserIDs = new ArrayList<Integer>();
for(UserPermissionKey userPermission : userPermissions) {
affectedUserIDs.add(userPermission.getAffected_user_id());
}
List<UserPermissionKey> userPermissions =
userPermissionDAO.selectByExample(userPermissionExample);
// 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) {
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(
@@ -821,23 +840,31 @@ public class PermissionCheckUtility {
allPermissions.add(newPermission);
}
//secondly, connection permissions
ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample();
connectionPermissionExample.createCriteria().andUser_idEqualTo(userID);
List<ConnectionPermissionKey> connectionPermissions = connectionPermissionDAO.selectByExample(connectionPermissionExample);
List<Integer> affectedConnectionIDs = new ArrayList<Integer>();
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
affectedConnectionIDs.add(connectionPermission.getConnection_id());
}
// Secondly, connection permissions
ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample();
connectionPermissionExample.createCriteria().andUser_idEqualTo(userID);
List<ConnectionPermissionKey> connectionPermissions =
connectionPermissionDAO.selectByExample(connectionPermissionExample);
// 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) {
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(
@@ -847,10 +874,13 @@ public class PermissionCheckUtility {
allPermissions.add(newPermission);
}
//and finally, system permissions
}
// And finally, system permissions
SystemPermissionExample systemPermissionExample = new SystemPermissionExample();
systemPermissionExample.createCriteria().andUser_idEqualTo(userID);
List<SystemPermissionKey> systemPermissions = systemPermissionDAO.selectByExample(systemPermissionExample);
List<SystemPermissionKey> systemPermissions =
systemPermissionDAO.selectByExample(systemPermissionExample);
for(SystemPermissionKey systemPermission : systemPermissions) {
SystemPermission newPermission = null;
if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_USER_CREATE))