Groups management UI

Jens Pelzetter 2020-10-20 20:21:28 +02:00
parent 2ba4536968
commit 39cd08bb28
9 changed files with 76 additions and 33 deletions

View File

@ -29,6 +29,8 @@ import org.libreccm.security.RequiresPrivilege;
import org.libreccm.ui.admin.AdminMessages;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped;
@ -146,4 +148,43 @@ public class GroupFormController {
}
}
@POST
@Path("{groupIdentifier}/groups")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
public String updateGroupMemberships(
@PathParam("groupIdentifier") final String groupIdentifierParam,
@FormParam("groupMembers") final String[] groupMembers
) {
final Map<String, Object> params = new HashMap<>();
params.put("groupIdentifier", groupIdentifierParam);
return String.format(
"redirect:",
mvc.uri(
"GroupsController#getGroupDetails",
params
)
);
}
@POST
@Path("{groupIdentifier}/roles")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
public String updateRoleMemberships(
@PathParam("groupIdentifier") final String groupIdentifierParam,
@FormParam("groupRoles") final String[] groupRoles
) {
// ToDo
return String.format(
"redirect:%s",
mvc.uri(
"UsersController#getUserDetails",
Map.of("userIdentifier", groupIdentifierParam)
)
);
}
}

View File

@ -29,6 +29,7 @@ import org.libreccm.security.UserRepository;
import org.libreccm.ui.admin.AdminMessages;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@ -221,11 +222,8 @@ public class UserFormController {
return String.format(
"redirect:%s",
mvc.uri(
String.format(
"UsersController#getUserDetails",
"{userIdentifier: %s}",
userIdentifierParam
)
Map.of("userIdentifier", userIdentifierParam)
)
);
}
@ -243,11 +241,8 @@ public class UserFormController {
return String.format(
"redirect:%s",
mvc.uri(
String.format(
"UsersController#getUserDetails",
"{userIdentifier: %s}",
userIdentifierParam
)
Map.of("userIdentifier", userIdentifierParam)
)
);
}

View File

@ -38,6 +38,7 @@ public class UsersGroupsRolesPage implements AdminPage {
final Set<Class<?>> classes = new HashSet<>();
classes.add(UsersGroupsRolesController.class);
classes.add(GroupsController.class);
classes.add(GroupFormController.class);
classes.add(RolesController.class);
classes.add(UsersController.class);
classes.add(UserFormController.class);

View File

@ -6,9 +6,9 @@
xmlns:xlink="http://www.w3.org/1999/xlink">
<ui:composition template="/WEB-INF/views/org/libreccm/ui/admin/users-groups-roles.xhtml">
<ui:param name="activePage" value="usersgroupsroles" />
<ui:param name="activePanel" value="users" />
<ui:param name="activePanel" value="groups" />
<ui:param name="title"
value="#{AdminMessages.getMessage('usersgroupsroles.groups.group_details.title', [GroupDetailsModel.name])}" />
value="#{AdminMessages.getMessage('usersgroupsroles.groups.group_details.title', [GroupDetailsModel.groupName])}" />
<ui:define name="breadcrumb">
<li class="breadcrumb-item">
@ -17,19 +17,19 @@
</a>
</li>
<li class="breadcrumb-item">
<a href="#{mvc.uri('UsersController#getGroups')}">
<a href="#{mvc.uri('GroupsController#getGroups')}">
#{AdminMessages['usersgroupsroles.groups.label']}
</a>
</li>
<li class="breadcrumb-item">
#{GroupDetailsModel.name}
#{GroupDetailsModel.groupName}
</li>
</ui:define>
<ui:define name="panel">
<dl>
<div>
<dt>#{AdminMessages['usersgroupsroles.groups.group_details.id']}</dt>
<dt>#{AdminMessages['usersgroupsroles.groups.group_details.groupId']}</dt>
<dd>#{GroupDetailsModel.groupId}</dd>
</div>
<div>
@ -37,12 +37,12 @@
<dd>#{GroupDetailsModel.uuid}</dd>
</div>
<div>
<dt>#{AdminMessages['usersgroupsroles.groups.group_details.name']}</dt>
<dd>#{GroupDetailsModel.name}</dd>
<dt>#{AdminMessages['usersgroupsroles.groups.group_details.groupName']}</dt>
<dd>#{GroupDetailsModel.groupName}</dd>
</div>
</dl>
<a class="btn btn-primary"
href="#{mvc.uri('GroupsController#editGroup', {'groupIdentifier': GroupDetailsModel.name })}">
href="#{mvc.uri('GroupsController#editGroup', {'groupIdentifier': GroupDetailsModel.groupName })}">
<svg class="bi"
width="1em"
height="1em"
@ -54,7 +54,7 @@
</span>
</a>
<div class="d-flex mb-1">
<div class="d-flex mt-3 mb-1">
<h2 class="mr-2">
#{AdminMessages['usersgroupsroles.groups.group_details.members.heading']}
</h2>
@ -77,7 +77,7 @@
id="group-members-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri('GroupFormController#updateGroupMemberships', {'groupIdentifier': GroupDetailsModel.name})}"
<form action="#{mvc.uri('GroupFormController#updateGroupMemberships', {'groupIdentifier': GroupDetailsModel.groupName})}"
class="modal-content"
method="post">
<div class="modal-header">
@ -163,15 +163,15 @@
aria-hidden="true"
class="modal fade"
data-backdrop="static"
id="user-roles-dialog"
id="group-roles-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri('UserFormController#updateRoleMemberships', {'userIdentifier': UserDetailsModel.name })}"
<form action="#{mvc.uri('GroupFormController#updateRoleMemberships', {'groupIdentifier': GroupDetailsModel.groupName })}"
class="modal-content"
method="post">
<div class="modal-header">
<h3 class="modal-title"
id="group-roles-dialog.title">
id="group-roles-dialog-title">
#{AdminMessages['usersgroupsroles.groups.group_details.roles.dialog.title']}
</h3>
<button aria-label="#{AdminMessages['usersgroupsroles.groups.group_details.roles.dialog.close']}"
@ -188,7 +188,7 @@
<input class="form-check-input"
checked="#{entry.member ? 'checked' : ''}"
id="role-#{entry.roleName}"
name="userRoles[]"
name="groupRoles[]"
value="#{entry.roleName}"
type="checkbox" />
<label for="role#{entry.roleName}">

View File

@ -7,7 +7,7 @@
<ui:param name="activePage" value="usersgroupsroles" />
<ui:param name="activePanel" value="users" />
<ui:param name="title"
value="#{GroupDetailsModel.newGroup ? AdminMessages['usersgroupsroles.groups.create.title'] : AdminMessages.getMessage('usersgroupsroles.groups.edit.title', [GroupDetailsModel.name]) }" />
value="#{GroupDetailsModel.newGroup ? AdminMessages['usersgroupsroles.groups.create.title'] : AdminMessages.getMessage('usersgroupsroles.groups.edit.title', [GroupDetailsModel.groupName]) }" />
<ui:define name="breadcrumb">
<li class="breadcrumb-item">
@ -16,13 +16,13 @@
</a>
</li>
<li class="breadcrumb-item">
<a href="#{mvc.uri('GroupsController#getGroup')}">
<a href="#{mvc.uri('GroupsController#getGroups')}">
#{AdminMessages['usersgroupsroles.groups.label']}
</a>
</li>
<li class="breadcrumb-item">
<a href="#{mvn.uri('GroupsController#getGroupDetails', { 'groupIdentfier': group.name })}">
#{UserDetailsModel.name}
#{GroupDetailsModel.groupName}
</a>
</li>
<li>
@ -48,7 +48,7 @@
class="form-control"
id="groupname"
name="groupName"
value="#{GroupDetailsModel.name}"
value="#{GroupDetailsModel.groupName}"
type="text" />
<small class="form-text text-muted"
id="groupname-help">
@ -56,12 +56,12 @@
</small>
</div>
<a class="btn btn-warning"
href="#{mvc.uri('UsersController#getGroups')}">
href="#{mvc.uri('GroupsController#getGroups')}">
#{AdminMessages['usersgroupsroles.groups.form.buttons.cancel']}
</a>
<button class="btn btn-success" type="submit">
<c:choose>
<c:when test="#{UserDetailsModel.newGroup}">
<c:when test="#{GroupDetailsModel.newGroup}">
#{AdminMessages['usersgroupsroles.groups.form.buttons.create']}
</c:when>
<c:otherwise>

View File

@ -28,7 +28,7 @@
</div>
<div class="col-sm-3 text-right">
<a class="btn btn-secondary"
href="#{mvc.uri("GroupsController#newGroup")}">
href="#{mvc.uri('GroupsController#newGroup')}">
<svg class="bi"
width="1em"
height="1em"
@ -52,7 +52,7 @@
<td>#{group.name}</td>
<td class="text-center action-col">
<a class="btn btn-info"
href="#">
href="#{mvc.uri('GroupsController#getGroupDetails', { 'groupIdentifier': group.name })}">
<svg class="bi"
width="1em"
height="1em"

View File

@ -131,7 +131,7 @@
</span>
</a>
<div class="d-flex">
<div class="d-flex mt-3">
<h2 class="mr-2">
#{AdminMessages['usersgroupsroles.users.user_details.additional_email_addresses.heading']}
</h2>

View File

@ -166,3 +166,6 @@ usersgroupsroles.users.user_details.roles.dialog.save=Apply
usersgroupsroles.groups.group_details.roles.dialog.save=Apply
usersgroupsroles.groups.group_details.roles.none=No roles assigned to this group
usersgroupsroles.groups.not_found.title=Group not found
usersgroupsroles.groups.group_details.groupId=Group ID
usersgroupsroles.groups.group_details.groupName=Group Name
usersgroupsroles.users.user_details.additional_email_addresses.cols.address=Address

View File

@ -166,3 +166,6 @@ usersgroupsroles.users.user_details.roles.dialog.save=Anwenden
usersgroupsroles.groups.group_details.roles.dialog.save=Anwenden
usersgroupsroles.groups.group_details.roles.none=Dieser Gruppe sind keine Rollen zugeordnet
usersgroupsroles.groups.not_found.title=Gruppe nicht gefunden
usersgroupsroles.groups.group_details.groupId=ID der Gruppe
usersgroupsroles.groups.group_details.groupName=Name der Gruppe
usersgroupsroles.users.user_details.additional_email_addresses.cols.address=Adresse