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.ProviderService;
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.Permission;
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 org.mybatis.guice.transactional.Transactional;
@@ -572,28 +570,15 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
List<String> systemPermissionTypes = new ArrayList<String>();
for (SystemPermission permission : permissions) {
// Connection directory permission
if (permission instanceof ConnectionDirectoryPermission) {
switch (permission.getType()) {
// Create permission
case CREATE:
// Create connection permission
case CREATE_CONNECTION:
systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_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:
// Create user permission
case CREATE_USER:
systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
@@ -602,7 +587,6 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
assert false : "Unsupported type: " + permission.getType();
}
}
} // end for each system permission
@@ -637,28 +621,15 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
List<String> systemPermissionTypes = new ArrayList<String>();
for (SystemPermission permission : permissions) {
// Connection directory permission
if (permission instanceof ConnectionDirectoryPermission) {
switch (permission.getType()) {
// Create permission
case CREATE:
// Create connection permission
case CREATE_CONNECTION:
systemPermissionTypes.add(MySQLConstants.SYSTEM_CONNECTION_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:
// Create user permission
case CREATE_USER:
systemPermissionTypes.add(MySQLConstants.SYSTEM_USER_CREATE);
break;
@@ -667,17 +638,15 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
assert false : "Unsupported type: " + permission.getType();
}
}
} // end for each system permission
// Finally, delete the requested system permissions for this user
if(!systemPermissionTypes.isEmpty()) {
SystemPermissionExample systemPermissionExample = new SystemPermissionExample();
systemPermissionExample.createCriteria().andUser_idEqualTo(user_id)
.andPermissionIn(systemPermissionTypes);
systemPermissionDAO.deleteByExample(systemPermissionExample);
}
}
@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.UserPermissionKey;
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.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.protocol.GuacamoleConfiguration;
@@ -904,11 +903,11 @@ public class PermissionCheckService {
// User creation permission
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
else if(systemPermission.getPermission().equals(MySQLConstants.SYSTEM_CONNECTION_CREATE))
allPermissions.add(new ConnectionDirectoryPermission(ConnectionDirectoryPermission.Type.CREATE));
allPermissions.add(new SystemPermission(SystemPermission.Type.CREATE_CONNECTION));
}