diff --git a/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java index f4b2f6460020..1df53cd26199 100644 --- a/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java +++ b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDao.java @@ -47,7 +47,7 @@ public interface ProjectAccountDao extends GenericDao { void removeAccountFromProjects(long accountId); - void removeUserFromProjects(long userId); + int removeByProjectIdAccountId(long projectId, long accountId); boolean canUserModifyProject(long projectId, long accountId, long userId); diff --git a/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java index b6eb6d44cea8..c09ac60bd215 100644 --- a/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/projects/dao/ProjectAccountDaoImpl.java @@ -193,14 +193,16 @@ public void removeAccountFromProjects(long accountId) { } @Override - public void removeUserFromProjects(long userId) { + public int removeByProjectIdAccountId(long projectId, long accountId) { SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("userId", userId); + sc.setParameters("projectId", projectId); + sc.setParameters("accountId", accountId); - int removedCount = remove(sc); - if (removedCount > 0) { - logger.debug(String.format("Removed user [%s] from %s project(s).", userId, removedCount)); + int rowsRemoved = remove(sc); + if (rowsRemoved > 0) { + logger.debug("Removed {} mappings of account id={} from project id={}", rowsRemoved, accountId, projectId); } + return rowsRemoved; } @Override diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java index d165f0cd1b6b..85427ebf5f03 100644 --- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java @@ -449,18 +449,11 @@ public Boolean doInTransaction(TransactionStatus status) { @Override public boolean unassignAccountFromProject(long projectId, long accountId) { - ProjectAccountVO projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId); - if (projectAccount == null) { + int removed = _projectAccountDao.removeByProjectIdAccountId(projectId, accountId); + if (removed == 0) { logger.debug("Account id=" + accountId + " is not assigned to project id=" + projectId + " so no need to unassign"); - return true; - } - - if (_projectAccountDao.remove(projectAccount.getId())) { - return true; - } else { - logger.warn("Failed to unassign account id=" + accountId + " from the project id=" + projectId); - return false; } + return true; } @Override