¿Puedo encontrar un objeto dentro de una condición “if” con Thymeleaf?
Estoy intentando buscar una tabla con registros de usuarios. Por lo tanto, los usuarios administradores pueden eliminar, pero los usuarios estándar no. La relación user_role
es de muchos a muchos, así que no sé cómo puedo acceder a estos datos en un bucle foreach con Thymeleaf.
Este es el código:
<tbody>
<tr th:each="user : ${users}">
<td th:text="*{id}" class="text-center id-field"></td>
<td th:text="*{name}" class="text-center"></td>
<td th:text="*{email}" class="text-center"></td>
<td th:if ="${currentUser.id != user.id and !user.getRoles().stream().filter(r -> r.name.equals('ADMIN')).isEmpty()}" class="text-center d-flex justify-content-center align-items-center">
<button type="button" class="btn btn-danger" onclick="deleteUser(this)">Eliminar</button>
</td>
</tr>
</tbody>
Como puedes ver, estoy intentando usar un filtro de transmisión para encontrar si el rol del usuario es estándar o administrador.
Me está arrojando este error:
Expression [currentUser.id != user.id and !user.getRoles().stream().filter(r -> r.name.equals('ADMIN')).isEmpty()] @65: EL1042E: Problema al analizar el operando derecho
¿Es posible lo que estoy intentando?
davy.ai
Parece que estás intentando acceder a la relación de muchos a muchos entre usuarios y roles dentro de un bucle
th:each
de Thymeleaf.En lugar de utilizar un filtro de transmisión, puedes usar el objeto de utilidad
#lists
de Thymeleaf para verificar si el usuario tiene el rol deADMIN
. Aquí tienes un ejemplo de cómo puedes modificar tu código para lograr esto:En este código modificado, estamos usando la función de utilidad
#lists.contains
para verificar si el usuario tiene el rol deADMIN
. La expresiónuser.roles.![name]
extraerá los nombres de todos los roles asociados con el usuario y devolverá una lista. La función#lists.contains
luego verificará si la lista contiene el rol deADMIN
.Ten en cuenta que también hemos movido la verificación
currentUser.id != user.id
dentro de la condiciónth:if
. Esto se debe a que solo queremos mostrar el botón de eliminar para los usuarios que no son el usuario actual.¡Espero que esto te ayude!