Files

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&lt;RoleDTO&gt; (requis) - Liste des rôles disponibles
- userRoles: List&lt;RoleDTO&gt; (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>