package org.ovirt.engine.core.bll; import java.util.Collections; import java.util.Map; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AdElementParametersBase; import org.ovirt.engine.core.common.action.PermissionsOperationsParametes; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class RemoveUserCommand<T extends AdElementParametersBase> extends UserCommandBase<T> { /** * Constructor for command creation when compensation is applied on startup * * @param commandId */ protected RemoveUserCommand(Guid commandId) { super(commandId); } public RemoveUserCommand(T parameters) { super(parameters); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.USER_REMOVE_ADUSER : AuditLogType.USER_FAILED_REMOVE_ADUSER; } @Override protected void executeCommand() { for (permissions permission : DbFacade.getInstance() .getPermissionDAO() .getAllDirectPermissionsForAdElement(getAdUserId())) { PermissionsOperationsParametes tempVar = new PermissionsOperationsParametes(permission); tempVar.setShouldBeLogged(false); Backend.getInstance().runInternalAction(VdcActionType.RemovePermission, tempVar); } DbFacade.getInstance().getDbUserDAO().remove(getAdUserId()); setSucceeded(true); } public static boolean CanRemoveUser(Guid user_guid, java.util.ArrayList<String> errors) { boolean returnValue = true; // check that the user exists in DB if (DbFacade.getInstance().getDbUserDAO().get(user_guid) == null) { errors.add(VdcBllMessages.USER_MUST_EXIST_IN_DB.toString()); returnValue = false; } return returnValue; } @Override protected boolean canDoAction() { boolean result = true; if (getParameters().getAdElementId().equals(PredefinedUsers.ADMIN_USER.getId())) { addCanDoActionMessage(VdcBllMessages.USER_CANNOT_REMOVE_ADMIN_USER); result = false; } else { if (getCurrentUser().getUserId().equals(getParameters().getAdElementId())) { addCanDoActionMessage(VdcBllMessages.USER_CANNOT_REMOVE_HIMSELF); result = false; } else { result = CanRemoveUser(getParameters().getAdElementId(), getReturnValue().getCanDoActionMessages()); } } return result; } @Override public Map<Guid, VdcObjectType> getPermissionCheckSubjects() { return Collections.singletonMap(MultiLevelAdministrationHandler.SYSTEM_OBJECT_ID, VdcObjectType.System); } }