Ticket #269: Refactor to support new SystemPermission organization (no more *DirectoryPermission classes).

This commit is contained in:
Michael Jumper
2013-02-27 16:19:51 -08:00
parent 66fece64f4
commit 64c2faa61d
2 changed files with 33 additions and 65 deletions

View File

@@ -69,11 +69,9 @@ import net.sourceforge.guacamole.net.auth.mysql.service.PasswordEncryptionServic
import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService; import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService;
import net.sourceforge.guacamole.net.auth.mysql.service.ProviderService; import net.sourceforge.guacamole.net.auth.mysql.service.ProviderService;
import net.sourceforge.guacamole.net.auth.mysql.service.SaltService; import net.sourceforge.guacamole.net.auth.mysql.service.SaltService;
import net.sourceforge.guacamole.net.auth.permission.ConnectionDirectoryPermission;
import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission; import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission;
import net.sourceforge.guacamole.net.auth.permission.Permission; import net.sourceforge.guacamole.net.auth.permission.Permission;
import net.sourceforge.guacamole.net.auth.permission.SystemPermission; import net.sourceforge.guacamole.net.auth.permission.SystemPermission;
import net.sourceforge.guacamole.net.auth.permission.UserDirectoryPermission;
import net.sourceforge.guacamole.net.auth.permission.UserPermission; import net.sourceforge.guacamole.net.auth.permission.UserPermission;
import org.mybatis.guice.transactional.Transactional; import org.mybatis.guice.transactional.Transactional;
@@ -572,36 +570,22 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
List<String> systemPermissionTypes = new ArrayList<String>(); List<String> systemPermissionTypes = new ArrayList<String>();
for (SystemPermission permission : permissions) { for (SystemPermission permission : permissions) {
// Connection directory permission switch (permission.getType()) {
if (permission instanceof ConnectionDirectoryPermission) {
switch (permission.getType()) {
// Create permission // Create connection permission
case CREATE: case CREATE_CONNECTION:
systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_CREATE); systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_CREATE);
break; break;
// Fail if unexpected type encountered // Create user permission
default: case CREATE_USER:
assert false : "Unsupported type: " + permission.getType(); systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
} // Fail if unexpected type encountered
} default:
assert false : "Unsupported type: " + permission.getType();
// User directory permission
else if (permission instanceof UserDirectoryPermission) {
switch (permission.getType()) {
// Create permission
case CREATE:
systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
// Fail if unexpected type encountered
default:
assert false : "Unsupported type: " + permission.getType();
}
} }
} // end for each system permission } // end for each system permission
@@ -630,54 +614,39 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
private void deleteSystemPermissions(int user_id, private void deleteSystemPermissions(int user_id,
Collection<SystemPermission> permissions) { Collection<SystemPermission> permissions) {
if(permissions.isEmpty()) if (permissions.isEmpty())
return; return;
// Build list of requested system permissions // Build list of requested system permissions
List<String> systemPermissionTypes = new ArrayList<String>(); List<String> systemPermissionTypes = new ArrayList<String>();
for (SystemPermission permission : permissions) { for (SystemPermission permission : permissions) {
// Connection directory permission switch (permission.getType()) {
if (permission instanceof ConnectionDirectoryPermission) {
switch (permission.getType()) {
// Create permission // Create connection permission
case CREATE: case CREATE_CONNECTION:
systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_CREATE); systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_CREATE);
break; break;
// Fail if unexpected type encountered // Create user permission
default: case CREATE_USER:
assert false : "Unsupported type: " + permission.getType(); systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
} // Fail if unexpected type encountered
} default:
assert false : "Unsupported type: " + permission.getType();
// User directory permission
else if (permission instanceof UserDirectoryPermission) {
switch (permission.getType()) {
// Create permission
case CREATE:
systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
// Fail if unexpected type encountered
default:
assert false : "Unsupported type: " + permission.getType();
}
} }
} // end for each system permission } // end for each system permission
// Finally, delete the requested system permissions for this user // Finally, delete the requested system permissions for this user
if(!systemPermissionTypes.isEmpty()) { SystemPermissionExample systemPermissionExample = new SystemPermissionExample();
SystemPermissionExample systemPermissionExample = new SystemPermissionExample(); systemPermissionExample.createCriteria().andUser_idEqualTo(user_id)
systemPermissionExample.createCriteria().andUser_idEqualTo(user_id) .andPermissionIn(systemPermissionTypes);
.andPermissionIn(systemPermissionTypes); systemPermissionDAO.deleteByExample(systemPermissionExample);
systemPermissionDAO.deleteByExample(systemPermissionExample);
}
} }
@Override @Override

View File

@@ -65,10 +65,9 @@ import net.sourceforge.guacamole.net.auth.mysql.model.UserExample;
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionExample; import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionExample;
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionKey; import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionKey;
import net.sourceforge.guacamole.net.auth.mysql.model.UserWithBLOBs; import net.sourceforge.guacamole.net.auth.mysql.model.UserWithBLOBs;
import net.sourceforge.guacamole.net.auth.permission.ConnectionDirectoryPermission;
import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission; import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission;
import net.sourceforge.guacamole.net.auth.permission.Permission; import net.sourceforge.guacamole.net.auth.permission.Permission;
import net.sourceforge.guacamole.net.auth.permission.UserDirectoryPermission; import net.sourceforge.guacamole.net.auth.permission.SystemPermission;
import net.sourceforge.guacamole.net.auth.permission.UserPermission; import net.sourceforge.guacamole.net.auth.permission.UserPermission;
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration; import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
@@ -904,11 +903,11 @@ public class PermissionCheckService {
// User creation permission // User creation permission
if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_USER_CREATE)) if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_USER_CREATE))
allPermissions.add(new UserDirectoryPermission(UserDirectoryPermission.Type.CREATE)); allPermissions.add(new SystemPermission(SystemPermission.Type.CREATE_USER));
// System creation permission // System creation permission
else if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_CONNECTION_CREATE)) else if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_CONNECTION_CREATE))
allPermissions.add(new ConnectionDirectoryPermission(ConnectionDirectoryPermission.Type.CREATE)); allPermissions.add(new SystemPermission(SystemPermission.Type.CREATE_CONNECTION));
} }