From be5c57877ab6794cbcb98e190c50430e078b9763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20M=C3=BCller?= Date: Mon, 16 Sep 2019 10:17:03 +0200 Subject: [PATCH] MGR-80 show groups and users for a role (#17) --- .../conf/datasources/ds-roles.xml | 6 ++ .../application/manager/form/GroupForm.java | 18 ++---- .../application/manager/form/RoleForm.java | 20 ++---- .../manager/service/ManagerService.java | 64 +++++++++++++------ .../resources/xml/RoleTest-testShowOne.xml | 12 ++++ .../xml/RoleTest-testUpdate-action.xml | 12 ++++ 6 files changed, 87 insertions(+), 45 deletions(-) diff --git a/application-home/conf/datasources/ds-roles.xml b/application-home/conf/datasources/ds-roles.xml index b2668b2..8d05b55 100644 --- a/application-home/conf/datasources/ds-roles.xml +++ b/application-home/conf/datasources/ds-roles.xml @@ -76,6 +76,12 @@ + + + + + + diff --git a/src/main/java/org/appng/application/manager/form/GroupForm.java b/src/main/java/org/appng/application/manager/form/GroupForm.java index 2d27493..6789dd1 100644 --- a/src/main/java/org/appng/application/manager/form/GroupForm.java +++ b/src/main/java/org/appng/application/manager/form/GroupForm.java @@ -22,13 +22,19 @@ import org.appng.core.domain.GroupImpl; +import lombok.Getter; +import lombok.Setter; + /** * Bindclass used for creating/updating a {@link GroupImpl}. * * @author Matthias Müller * */ +@Getter +@Setter public class GroupForm { + private GroupImpl group; private List roleIds = new ArrayList(); @@ -46,16 +52,4 @@ public GroupImpl getGroup() { return group; } - public void setGroup(GroupImpl group) { - this.group = group; - } - - public List getRoleIds() { - return roleIds; - } - - public void setRoleIds(List roleIds) { - this.roleIds = roleIds; - } - } diff --git a/src/main/java/org/appng/application/manager/form/RoleForm.java b/src/main/java/org/appng/application/manager/form/RoleForm.java index 94cd643..1981fab 100644 --- a/src/main/java/org/appng/application/manager/form/RoleForm.java +++ b/src/main/java/org/appng/application/manager/form/RoleForm.java @@ -22,16 +22,23 @@ import org.appng.core.domain.RoleImpl; +import lombok.Getter; +import lombok.Setter; + /** * Bindclass used for creating/updating a {@link RoleImpl}. * * @author Matthias Müller * */ +@Getter +@Setter public class RoleForm { private RoleImpl role; private List permissionIds = new ArrayList(); + private List groupIds = new ArrayList(); + private List userIds = new ArrayList(); public RoleForm() { this(new RoleImpl()); @@ -45,17 +52,4 @@ public RoleForm(RoleImpl role) { public RoleImpl getRole() { return role; } - - public void setRole(RoleImpl role) { - this.role = role; - } - - public List getPermissionIds() { - return permissionIds; - } - - public void setPermissionIds(List permissionIds) { - this.permissionIds = permissionIds; - } - } diff --git a/src/main/java/org/appng/application/manager/service/ManagerService.java b/src/main/java/org/appng/application/manager/service/ManagerService.java index 731d30e..3fa9406 100644 --- a/src/main/java/org/appng/application/manager/service/ManagerService.java +++ b/src/main/java/org/appng/application/manager/service/ManagerService.java @@ -313,19 +313,15 @@ public DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, if (null == group) { throw new BusinessException("no such group : " + groupId, MessageConstants.GROUP_NOT_EXISTS); } - Selection selection = getRoleSelection(group, site.getId()); - - List users = group.getSubjects().stream() - .map(s -> String.format("%s (%s)", s.getAuthName(), s.getRealname())).sorted() - .collect(Collectors.toList()); - if (!users.isEmpty()) { - Selection subjects = new SelectionBuilder("subjects").title(MessageConstants.SUBJECTS) - .type(SelectionType.CHECKBOX).options(users).select(users).build(); + Selection roleSelection = getRoleSelection(group, site.getId()); + data.getSelections().add(roleSelection); + + if (!group.getSubjects().isEmpty()) { + Selection subjects = getSubjectSelection(group.getSubjects(), "subjects"); data.getSelections().add(subjects); } else { fp.getMetaData().getFields().remove(fp.getField("group.subjects")); } - data.getSelections().add(selection); data.setItem(new GroupForm(group)); } else { Selection nameFilter = new SelectionBuilder(FILTER_GROUP_NAME) @@ -341,6 +337,13 @@ public DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, return data; } + private Selection getSubjectSelection(Collection subjects, String id) { + List users = subjects.stream().map(s -> String.format("%s (%s)", s.getAuthName(), s.getRealname())) + .sorted().collect(Collectors.toList()); + return new SelectionBuilder(id).title(MessageConstants.SUBJECTS).type(SelectionType.CHECKBOX) + .options(users).select(users).disable(users).build(); + } + private Selection getRoleSelection(Group group, Integer siteId) { SiteImpl site = siteRepository.findOne(siteId); Selection selection = selectionFactory.fromObjects("roles", "roles", new Object[0], (Selector) null); @@ -453,9 +456,8 @@ public DataContainer searchPackageVersions(Request request, FieldProcessor fp, I } /** - * Returns a {@link Packages}-object from a certain repository. {@link Packages} - * are made available to other appNG instances via the - * {@link RepositoryService}. + * Returns a {@link Packages}-object from a certain repository. {@link Packages} are made available to other appNG + * instances via the {@link RepositoryService}. */ public Packages searchPackages(Environment environment, FieldProcessor fp, String repositoryName, String digest, String packageName) throws BusinessException { @@ -469,9 +471,8 @@ public Packages searchPackages(Environment environment, FieldProcessor fp, Strin } /** - * Returns a {@link PackageVersions}-object from a certain repository. - * {@link PackageVersions} are made available to other appNG instances via the - * {@link RepositoryService}. + * Returns a {@link PackageVersions}-object from a certain repository. {@link PackageVersions} are made available to + * other appNG instances via the {@link RepositoryService}. */ public PackageVersions searchPackageVersions(Environment environment, FieldProcessor fp, String repositoryName, String packageName, String digest) throws BusinessException { @@ -702,6 +703,30 @@ public DataContainer searchRole(FieldProcessor fp, Integer roleId, Integer appId if (null == role) { throw new BusinessException("no such Role " + roleId, MessageConstants.ROLE_NOT_EXISTS); } + List groupList = groupRepository.findGroupsForApplicationRole(roleId); + List groups = groupList.stream().map(GroupImpl::getName).sorted().collect(Collectors.toList()); + if (!groups.isEmpty()) { + Selection groupSelection = new SelectionBuilder("groupIds").title(MessageConstants.GROUPS) + .type(SelectionType.CHECKBOX).options(groups).disable(groups).select(groups).build(); + data.getSelections().add(groupSelection); + } else { + fp.getMetaData().getFields().remove(fp.getField("groupIds")); + } + + SearchQuery subjectQuery = subjectRepository.createSearchQuery(); + subjectQuery.distinct(); + subjectQuery.setAppendEntityAlias(false); + subjectQuery.join("join e.groups g"); + subjectQuery.in("g", groupList); + List subjectList = subjectRepository.search(subjectQuery, null).getContent(); + + if (!subjectList.isEmpty()) { + Selection subjectSelection = getSubjectSelection(subjectList, "subjectIds"); + data.getSelections().add(subjectSelection); + } else { + fp.getMetaData().getFields().remove(fp.getField("subjectIds")); + } + Selection selection = getPermissionSelection(role.getApplication().getId(), role); data.getSelections().add(selection); RoleForm form = new RoleForm(role); @@ -934,8 +959,8 @@ private void checkUniqueRepositoryName(Request request, Repository repository, F } } - public DataContainer searchSites(Environment environment, FieldProcessor fp, Integer siteId, String name, String domain) - throws BusinessException { + public DataContainer searchSites(Environment environment, FieldProcessor fp, Integer siteId, String name, + String domain) throws BusinessException { DataContainer data = new DataContainer(fp); if (siteId != null) { SiteImpl site = siteRepository.findOne(siteId); @@ -962,9 +987,8 @@ public DataContainer searchSites(Environment environment, FieldProcessor fp, Int siteImpl.setStartupTime(site.getStartupTime()); } } - Selection nameFilter = new SelectionBuilder(FILTER_SITE_NAME) - .defaultOption(FILTER_SITE_NAME, name).title(MessageConstants.NAME).type(SelectionType.TEXT) - .select(name).build(); + Selection nameFilter = new SelectionBuilder(FILTER_SITE_NAME).defaultOption(FILTER_SITE_NAME, name) + .title(MessageConstants.NAME).type(SelectionType.TEXT).select(name).build(); Selection domainFilter = new SelectionBuilder(FILTER_SITE_DOMAIN) .defaultOption(FILTER_SITE_DOMAIN, domain).title(MessageConstants.DOMAIN).type(SelectionType.TEXT) .select(domain).build(); diff --git a/src/test/resources/xml/RoleTest-testShowOne.xml b/src/test/resources/xml/RoleTest-testShowOne.xml index 4e454c1..d715c22 100644 --- a/src/test/resources/xml/RoleTest-testShowOne.xml +++ b/src/test/resources/xml/RoleTest-testShowOne.xml @@ -15,6 +15,12 @@ + + + + + + @@ -36,6 +42,12 @@ + + + + + + diff --git a/src/test/resources/xml/RoleTest-testUpdate-action.xml b/src/test/resources/xml/RoleTest-testUpdate-action.xml index c3f5c03..61486bb 100644 --- a/src/test/resources/xml/RoleTest-testUpdate-action.xml +++ b/src/test/resources/xml/RoleTest-testUpdate-action.xml @@ -37,6 +37,12 @@ + + + + + + @@ -67,6 +73,12 @@ + + + + + +