Ticket #269: Added administrate permission on delete user, and initially give full access to newly created user.

This commit is contained in:
James Muehlner
2013-02-15 01:20:00 -08:00
parent e6e9200f98
commit b5aa49aa69

View File

@@ -175,6 +175,19 @@ public class UserDirectory implements Directory<String, User> {
//create permissions in database //create permissions in database
updatePermissions(mySQLUser); updatePermissions(mySQLUser);
//finally, give the current user full access to the newly created user.
UserPermissionKey newUserPermission = new UserPermissionKey();
newUserPermission.setUser_id(this.user.getUserID());
newUserPermission.setAffected_user_id(mySQLUser.getUserID());
newUserPermission.setPermission(MySQLConstants.USER_READ);
userPermissionDAO.insert(newUserPermission);
newUserPermission.setPermission(MySQLConstants.USER_UPDATE);
userPermissionDAO.insert(newUserPermission);
newUserPermission.setPermission(MySQLConstants.USER_DELETE);
userPermissionDAO.insert(newUserPermission);
newUserPermission.setPermission(MySQLConstants.USER_ADMINISTER);
userPermissionDAO.insert(newUserPermission);
} }
/** /**
@@ -418,15 +431,37 @@ public class UserDirectory implements Directory<String, User> {
* Delete all permissions associated with the provided user. * Delete all permissions associated with the provided user.
* @param user * @param user
*/ */
private void deleteAllPermissions(MySQLUser user) { private void deleteAllPermissions(MySQLUser user) throws GuacamolePermissionException {
// Get the list of all the users and connections that the user performing the user save action has.
// Need to make sure the user saving this user has permission to administrate all the objects in the permission list.
Set<Integer> administerableUsers = permissionCheckUtility.getAdministerableUserIDs(this.user.getUserID());
Set<Integer> administerableConnections = permissionCheckUtility.getAdministerableConnectionIDs(this.user.getUserID());
//delete all user permissions //delete all user permissions
UserPermissionExample userPermissionExample = new UserPermissionExample(); UserPermissionExample userPermissionExample = new UserPermissionExample();
userPermissionExample.createCriteria().andUser_idEqualTo(user.getUserID()); userPermissionExample.createCriteria().andUser_idEqualTo(user.getUserID());
List<UserPermissionKey> permissionsToDelete = userPermissionDAO.selectByExample(userPermissionExample);
// verify that the user actually has permission to administrate every one of these users
for(UserPermissionKey permissionToDelete : permissionsToDelete) {
if(!administerableUsers.contains(permissionToDelete.getAffected_user_id()))
throw new GuacamolePermissionException("User '" + this.user.getUsername() + "' does not have permission to administrate user " + permissionToDelete.getAffected_user_id());
}
userPermissionDAO.deleteByExample(userPermissionExample); userPermissionDAO.deleteByExample(userPermissionExample);
//delete all connection permissions //delete all connection permissions
ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample(); ConnectionPermissionExample connectionPermissionExample = new ConnectionPermissionExample();
connectionPermissionExample.createCriteria().andUser_idEqualTo(user.getUserID()); connectionPermissionExample.createCriteria().andUser_idEqualTo(user.getUserID());
//make sure the user has permission to administrate each of these connections
List<ConnectionPermissionKey> connectionPermissionsToDelete = connectionPermissionDAO.selectByExample(connectionPermissionExample);
for(ConnectionPermissionKey connectionPermissionToDelete : connectionPermissionsToDelete) {
if(!administerableConnections.contains(connectionPermissionToDelete.getConnection_id()))
throw new GuacamolePermissionException("User '" + this.user.getUsername() + "' does not have permission to administrate connection " + connectionPermissionToDelete.getConnection_id());
}
connectionPermissionDAO.deleteByExample(connectionPermissionExample); connectionPermissionDAO.deleteByExample(connectionPermissionExample);
//delete all system permissions //delete all system permissions