Groups management UI
parent
9bc6659fb2
commit
a6b7c7e900
|
|
@ -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)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
"UsersController#getUserDetails",
|
||||
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
|
||||
)
|
||||
"UsersController#getUserDetails",
|
||||
Map.of("userIdentifier", userIdentifierParam)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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}">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue