mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
server: Roles search by keyword (#7384)
This PR fixes #7362 and also other search criteria to use the name as an exact search where keyword is also there. Made UI changes for roles search to make use of keyword instead of name.
This commit is contained in:
parent
b774ee5d11
commit
65512af779
@ -80,7 +80,7 @@ public interface RoleService {
|
||||
*/
|
||||
List<Role> findRolesByName(String name);
|
||||
|
||||
Pair<List<Role>, Integer> findRolesByName(String name, Long startIndex, Long limit);
|
||||
Pair<List<Role>, Integer> findRolesByName(String name, String keyword, Long startIndex, Long limit);
|
||||
|
||||
/**
|
||||
* Find all roles by {@link RoleType}. If the role type is {@link RoleType#Admin}, the calling account must be a root admin, otherwise we return an empty list.
|
||||
|
||||
@ -105,8 +105,8 @@ public class ListRolesCmd extends BaseListCmd {
|
||||
Pair<List<Role>, Integer> roles;
|
||||
if (getId() != null && getId() > 0L) {
|
||||
roles = new Pair<List<Role>, Integer>(Collections.singletonList(roleService.findRole(getId())), 1);
|
||||
} else if (StringUtils.isNotBlank(getName())) {
|
||||
roles = roleService.findRolesByName(getName(), getStartIndex(), getPageSizeVal());
|
||||
} else if (StringUtils.isNotBlank(getName()) || StringUtils.isNotBlank(getKeyword())) {
|
||||
roles = roleService.findRolesByName(getName(), getKeyword(), getStartIndex(), getPageSizeVal());
|
||||
} else if (getRoleType() != null) {
|
||||
roles = roleService.findRolesByType(getRoleType(), getStartIndex(), getPageSizeVal());
|
||||
} else {
|
||||
|
||||
@ -28,7 +28,7 @@ import java.util.List;
|
||||
public interface RoleDao extends GenericDao<RoleVO, Long> {
|
||||
List<RoleVO> findAllByName(String roleName);
|
||||
|
||||
Pair<List<RoleVO>, Integer> findAllByName(final String roleName, Long offset, Long limit);
|
||||
Pair<List<RoleVO>, Integer> findAllByName(final String roleName, String keyword, Long offset, Long limit);
|
||||
|
||||
List<RoleVO> findAllByRoleType(RoleType type);
|
||||
List<RoleVO> findByName(String roleName);
|
||||
|
||||
@ -25,6 +25,7 @@ import com.cloud.utils.db.SearchCriteria;
|
||||
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.acl.RoleVO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
@ -54,13 +55,19 @@ public class RoleDaoImpl extends GenericDaoBase<RoleVO, Long> implements RoleDao
|
||||
|
||||
@Override
|
||||
public List<RoleVO> findAllByName(final String roleName) {
|
||||
return findAllByName(roleName, null, null).first();
|
||||
return findAllByName(roleName, null, null, null).first();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<RoleVO>, Integer> findAllByName(final String roleName, Long offset, Long limit) {
|
||||
public Pair<List<RoleVO>, Integer> findAllByName(final String roleName, String keyword, Long offset, Long limit) {
|
||||
SearchCriteria<RoleVO> sc = RoleByNameSearch.create();
|
||||
sc.setParameters("roleName", "%" + roleName + "%");
|
||||
if (StringUtils.isNotEmpty(roleName)) {
|
||||
sc.setParameters("roleName", roleName);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(keyword)) {
|
||||
sc.setParameters("roleName", "%" + keyword + "%");
|
||||
}
|
||||
|
||||
return searchAndCount(sc, new Filter(RoleVO.class, "id", true, offset, limit));
|
||||
}
|
||||
|
||||
|
||||
@ -287,7 +287,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements
|
||||
|
||||
SearchBuilder<VMInstanceVO> sb = vmInstanceDao.createSearchBuilder();
|
||||
sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
|
||||
sb.and("type", sb.entity().getType(), SearchCriteria.Op.NEQ);
|
||||
|
||||
@ -340,7 +340,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements
|
||||
|
||||
SearchBuilder<VolumeVO> sb = volumeDao.createSearchBuilder();
|
||||
sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
|
||||
|
||||
SearchCriteria<VolumeVO> sc = sb.create();
|
||||
|
||||
@ -1391,7 +1391,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
||||
final SearchBuilder<VpcVO> sb = vpcDao.createSearchBuilder();
|
||||
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
sb.and("displayText", sb.entity().getDisplayText(), SearchCriteria.Op.LIKE);
|
||||
sb.and("vpcOfferingId", sb.entity().getVpcOfferingId(), SearchCriteria.Op.EQ);
|
||||
|
||||
@ -4580,7 +4580,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
|
||||
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
final SearchCriteria<UserDataVO> sc = sb.create();
|
||||
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
|
||||
@ -357,13 +357,13 @@ public class RoleManagerImpl extends ManagerBase implements RoleService, Configu
|
||||
|
||||
@Override
|
||||
public List<Role> findRolesByName(String name) {
|
||||
return findRolesByName(name, null, null).first();
|
||||
return findRolesByName(name, null, null, null).first();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<Role>, Integer> findRolesByName(String name, Long startIndex, Long limit) {
|
||||
if (StringUtils.isNotBlank(name)) {
|
||||
Pair<List<RoleVO>, Integer> data = roleDao.findAllByName(name, startIndex, limit);
|
||||
public Pair<List<Role>, Integer> findRolesByName(String name, String keyword, Long startIndex, Long limit) {
|
||||
if (StringUtils.isNotBlank(name) || StringUtils.isNotBlank(keyword)) {
|
||||
Pair<List<RoleVO>, Integer> data = roleDao.findAllByName(name, keyword, startIndex, limit);
|
||||
int removed = removeRootAdminRolesIfNeeded(data.first());
|
||||
return new Pair<List<Role>,Integer>(ListUtils.toListOfInterface(data.first()), Integer.valueOf(data.second() - removed));
|
||||
}
|
||||
|
||||
@ -223,7 +223,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager {
|
||||
final Filter searchFilter = new Filter(BackupOfferingVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
SearchBuilder<BackupOfferingVO> sb = backupOfferingDao.createSearchBuilder();
|
||||
sb.and("zone_id", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
|
||||
|
||||
final SearchCriteria<BackupOfferingVO> sc = sb.create();
|
||||
|
||||
|
||||
@ -166,7 +166,7 @@ public class RoleManagerImplTest {
|
||||
String roleName = "roleName";
|
||||
List<Role> roles = new ArrayList<>();
|
||||
Pair<ArrayList<RoleVO>, Integer> toBeReturned = new Pair(roles, 0);
|
||||
Mockito.doReturn(toBeReturned).when(roleDaoMock).findAllByName(roleName, null, null);
|
||||
Mockito.doReturn(toBeReturned).when(roleDaoMock).findAllByName(roleName, null, null, null);
|
||||
|
||||
roleManagerImpl.findRolesByName(roleName);
|
||||
Mockito.verify(roleManagerImpl).removeRootAdminRolesIfNeeded(roles);
|
||||
|
||||
@ -1609,9 +1609,7 @@ export default {
|
||||
if ('searchQuery' in opts) {
|
||||
const value = opts.searchQuery
|
||||
if (value && value.length > 0) {
|
||||
if (this.$route.name === 'role') {
|
||||
query.name = value
|
||||
} else if (this.$route.name === 'quotaemailtemplate') {
|
||||
if (this.$route.name === 'quotaemailtemplate') {
|
||||
query.templatetype = value
|
||||
} else if (this.$route.name === 'globalsetting') {
|
||||
query.name = value
|
||||
|
||||
@ -920,7 +920,7 @@ describe('Views > AutogenView.vue', () => {
|
||||
await flushPromises()
|
||||
|
||||
expect(router.currentRoute.value.path).toEqual('/role')
|
||||
expect(router.currentRoute.value.query).toEqual({ name: 'test-value', q: 'test-value', page: '1', pagesize: '20' })
|
||||
expect(router.currentRoute.value.query).toEqual({ keyword: 'test-value', q: 'test-value', page: '1', pagesize: '20' })
|
||||
done()
|
||||
})
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user