184 lines
9.2 KiB
HTML
184 lines
9.2 KiB
HTML
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
|
xmlns:p="http://primefaces.org/ui"
|
|
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
|
|
|
|
<!--
|
|
Composant réutilisable: Attribution de Rôles (WOU/DRY Pattern)
|
|
|
|
Auteur: Lions User Manager
|
|
Version: 1.0.0
|
|
Description: Interface pour attribuer/révoquer des rôles à un utilisateur
|
|
|
|
Paramètres:
|
|
- user: UserDTO (requis) - L'utilisateur concerné
|
|
- availableRoles: List<RoleDTO> (requis) - Liste des rôles disponibles
|
|
- userRoles: List<RoleDTO> (requis) - Liste des rôles de l'utilisateur
|
|
- roleBean: String (optionnel) - Nom du bean pour les actions (défaut: "roleGestionBean")
|
|
- update: String (défaut: "@form") - Composants à mettre à jour
|
|
- showRealmRoles: Boolean (défaut: true) - Afficher les rôles Realm
|
|
- showClientRoles: Boolean (défaut: true) - Afficher les rôles Client
|
|
- formId: String (défaut: "roleAssignmentForm") - ID du formulaire
|
|
|
|
Exemples d'utilisation:
|
|
|
|
1. Attribution simple:
|
|
<ui:include src="/templates/components/role-management/role-assignment.xhtml">
|
|
<ui:param name="user" value="#{userBean.selectedUser}" />
|
|
<ui:param name="availableRoles" value="#{roleBean.availableRoles}" />
|
|
<ui:param name="userRoles" value="#{userBean.userRoles}" />
|
|
<ui:param name="assignAction" value="#{roleBean.assignRole}" />
|
|
<ui:param name="revokeAction" value="#{roleBean.revokeRole}" />
|
|
</ui:include>
|
|
-->
|
|
|
|
<c:set var="formId" value="#{empty formId ? 'roleAssignmentForm' : formId}" />
|
|
<c:set var="update" value="#{empty update ? '@form' : update}" />
|
|
<c:set var="showRealmRoles" value="#{empty showRealmRoles ? true : showRealmRoles}" />
|
|
<c:set var="showClientRoles" value="#{empty showClientRoles ? true : showClientRoles}" />
|
|
<c:set var="roleBeanName" value="#{empty roleBean ? 'roleGestionBean' : roleBean}" />
|
|
|
|
<h:form id="#{formId}">
|
|
<p:panel header="Attribution de rôles - #{user.username}" styleClass="w-full">
|
|
|
|
<!-- Rôles actuels de l'utilisateur -->
|
|
<h3>Rôles actuels</h3>
|
|
<div class="flex flex-wrap gap-2 mb-4">
|
|
<c:forEach var="userRole" items="#{userRoles}">
|
|
<p:tag
|
|
value="#{userRole.name}"
|
|
severity="info"
|
|
icon="pi pi-shield">
|
|
<p:commandButton
|
|
icon="pi pi-times"
|
|
styleClass="p-button-text p-button-sm p-button-danger ml-2"
|
|
action="#{roleGestionBean.revokeRoleFromParams}"
|
|
update="#{update}"
|
|
title="Révoquer le rôle">
|
|
<f:param name="userId" value="#{user.id}" />
|
|
<f:param name="roleName" value="#{userRole.name}" />
|
|
</p:commandButton>
|
|
</p:tag>
|
|
</c:forEach>
|
|
<c:if test="#{empty userRoles}">
|
|
<span class="text-color-secondary">Aucun rôle attribué</span>
|
|
</c:if>
|
|
</div>
|
|
|
|
<p:separator />
|
|
|
|
<!-- Rôles disponibles -->
|
|
<h3>Rôles disponibles</h3>
|
|
|
|
<!-- Rôles Realm -->
|
|
<c:if test="#{showRealmRoles}">
|
|
<p:panel header="Rôles Realm" styleClass="mb-3">
|
|
<div class="flex flex-wrap gap-2">
|
|
<c:forEach var="role" items="#{availableRoles}">
|
|
<c:if test="#{role.typeRole == 'REALM_ROLE'}">
|
|
<c:set var="isAssigned" value="false" />
|
|
<c:forEach var="userRole" items="#{userRoles}">
|
|
<c:if test="#{userRole.id == role.id}">
|
|
<c:set var="isAssigned" value="true" />
|
|
</c:if>
|
|
</c:forEach>
|
|
|
|
<c:choose>
|
|
<c:when test="#{isAssigned}">
|
|
<p:tag
|
|
value="#{role.name}"
|
|
severity="success"
|
|
icon="pi pi-check" />
|
|
</c:when>
|
|
<c:otherwise>
|
|
<p:tag
|
|
value="#{role.name}"
|
|
severity="info"
|
|
icon="pi pi-shield">
|
|
<p:commandButton
|
|
icon="pi pi-plus"
|
|
styleClass="p-button-text p-button-sm p-button-success ml-2"
|
|
action="#{roleGestionBean.assignRoleFromParams}"
|
|
update="#{update}"
|
|
title="Attribuer le rôle">
|
|
<f:param name="userId" value="#{user.id}" />
|
|
<f:param name="roleName" value="#{role.name}" />
|
|
</p:commandButton>
|
|
</p:tag>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
</c:if>
|
|
</c:forEach>
|
|
</div>
|
|
</p:panel>
|
|
</c:if>
|
|
|
|
<!-- Rôles Client -->
|
|
<c:if test="#{showClientRoles}">
|
|
<p:panel header="Rôles Client" styleClass="mb-3">
|
|
<div class="flex flex-wrap gap-2">
|
|
<c:forEach var="role" items="#{availableRoles}">
|
|
<c:if test="#{role.typeRole == 'CLIENT_ROLE'}">
|
|
<c:set var="isAssigned" value="false" />
|
|
<c:forEach var="userRole" items="#{userRoles}">
|
|
<c:if test="#{userRole.id == role.id}">
|
|
<c:set var="isAssigned" value="true" />
|
|
</c:if>
|
|
</c:forEach>
|
|
|
|
<c:choose>
|
|
<c:when test="#{isAssigned}">
|
|
<p:tag
|
|
value="#{role.name}"
|
|
severity="success"
|
|
icon="pi pi-check" />
|
|
</c:when>
|
|
<c:otherwise>
|
|
<p:tag
|
|
value="#{role.name}"
|
|
severity="info"
|
|
icon="pi pi-shield">
|
|
<p:commandButton
|
|
icon="pi pi-plus"
|
|
styleClass="p-button-text p-button-sm p-button-success ml-2"
|
|
action="#{roleGestionBean.assignRoleFromParams}"
|
|
update="#{update}"
|
|
title="Attribuer le rôle">
|
|
<f:param name="userId" value="#{user.id}" />
|
|
<f:param name="roleName" value="#{role.name}" />
|
|
</p:commandButton>
|
|
</p:tag>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
</c:if>
|
|
</c:forEach>
|
|
</div>
|
|
</p:panel>
|
|
</c:if>
|
|
|
|
<!-- Recherche de rôles -->
|
|
<p:separator />
|
|
<h3>Rechercher un rôle</h3>
|
|
<div class="flex gap-2 mb-3">
|
|
<p:inputText
|
|
value="#{roleGestionBean.roleSearchText}"
|
|
placeholder="Rechercher un rôle..."
|
|
styleClass="flex-1">
|
|
<p:ajax event="keyup"
|
|
delay="300"
|
|
update="@parent" />
|
|
</p:inputText>
|
|
</div>
|
|
|
|
<div id="roleSearchResults" class="flex flex-wrap gap-2">
|
|
<!-- Résultats de recherche -->
|
|
</div>
|
|
|
|
</p:panel>
|
|
</h:form>
|
|
|
|
</ui:composition>
|
|
|