gmao/app_new/templates/admin/user_permissions.html

205 lines
No EOL
9.6 KiB
HTML

{% extends "base.html" %}
{% block title %}Permissions utilisateur - {{ user.full_name }} - GMAO Collège{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="row mb-4">
<div class="col">
<h1 class="h3">
<i class="bi bi-shield-check"></i> Permissions de {{ user.full_name }}
</h1>
<p class="text-muted">
Rôle actuel : <span class="badge {% if user.role == 'admin' %}bg-danger{% elif user.role == 'chef' %}bg-warning{% elif user.role == 'technicien' %}bg-success{% else %}bg-info{% endif %}">{{ user.role|title }}</span>
</p>
</div>
<div class="col-auto">
<a href="{{ url_for('admin.list_users') }}" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Retour
</a>
</div>
</div>
<!-- Informations utilisateur -->
<div class="row mb-4">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Informations</h5>
</div>
<div class="card-body">
<table class="table table-sm">
<tr>
<td><strong>Nom d'utilisateur:</strong></td>
<td>{{ user.username }}</td>
</tr>
<tr>
<td><strong>Email:</strong></td>
<td>{{ user.email or 'Non défini' }}</td>
</tr>
<tr>
<td><strong>Statut:</strong></td>
<td>
{% if user.is_active %}
<span class="badge bg-success">Actif</span>
{% else %}
<span class="badge bg-secondary">Inactif</span>
{% endif %}
</td>
</tr>
<tr>
<td><strong>Date de création:</strong></td>
<td>{{ user.created_at|datetime_fmt if user.created_at else 'Non défini' }}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Permissions actuelles</h5>
</div>
<div class="card-body">
<div class="row g-2">
{% for perm in user_permissions %}
<div class="col-6">
<div class="alert alert-success small mb-1">
<i class="bi bi-check-circle"></i> {{ perm|replace(':', ': ')|replace('_', ' ')|capitalize }}
</div>
</div>
{% endfor %}
{% if not user_permissions %}
<div class="col-12">
<div class="alert alert-warning small">
<i class="bi bi-exclamation-circle"></i> Aucune permission définie
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- Modifier le rôle -->
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">Modifier le rôle</h5>
</div>
<div class="card-body">
<form method="post" action="{{ url_for('admin.update_user_permissions', user_id=user.id) }}">
<div class="row">
<div class="col-md-6">
<label for="role" class="form-label">Nouveau rôle</label>
<select class="form-select" id="role" name="role" required>
<option value="">Sélectionner un rôle</option>
<option value="admin" {% if user.role == 'admin' %}selected{% endif %}>
Administrateur (accès à tout)
</option>
<option value="chef" {% if user.role == 'chef' %}selected{% endif %}>
Chef d'établissement (gestion interventions, planning)
</option>
<option value="technicien" {% if user.role == 'technicien' %}selected{% endif %}>
Technicien (gestions interventions, équipements)
</option>
<option value="demandeur" {% if user.role == 'demandeur' %}selected{% endif %}>
Demandeur (création interventions, consultation)
</option>
</select>
<div class="form-text">
Le changement de rôle mettra à jour automatiquement les permissions de l'utilisateur.
</div>
</div>
<div class="col-md-6">
<label class="form-label">Permissions correspondantes</label>
<div class="border rounded p-3" style="height: 200px; overflow-y: auto;">
{% for perm in all_permissions %}
<div class="form-check mb-1">
<input class="form-check-input" type="checkbox"
id="preview_{{ perm.replace('.', '_') }}"
{% if perm in user_permissions %}checked{% endif %} disabled>
<label class="form-check-label small" for="preview_{{ perm.replace('.', '_') }}">
{{ perm|replace(':', ': ')|replace('_', ' ')|capitalize }}
</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="text-end mt-3">
<a href="{{ url_for('admin.list_users') }}" class="btn btn-secondary">Annuler</a>
<button type="submit" class="btn btn-primary">
<i class="bi bi-save"></i> Enregistrer les modifications
</button>
</div>
</form>
</div>
</div>
<!-- Comparaison des rôles -->
<div class="card">
<div class="card-header">
<h5 class="mb-0">Comparaison des permissions par rôle</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Permission</th>
<th>Admin</th>
<th>Chef</th>
<th>Technicien</th>
<th>Demandeur</th>
<th>Actuel</th>
</tr>
</thead>
<tbody>
{% for perm in all_permissions %}
<tr>
<td class="small">{{ perm|replace(':', ': ')|replace('_', ' ')|capitalize }}</td>
<td class="text-center">
{% if perm in get_role_permissions('admin') %}
<i class="bi bi-check-circle text-success"></i>
{% else %}
<i class="bi bi-x-circle text-muted"></i>
{% endif %}
</td>
<td class="text-center">
{% if perm in get_role_permissions('chef') %}
<i class="bi bi-check-circle text-success"></i>
{% else %}
<i class="bi bi-x-circle text-muted"></i>
{% endif %}
</td>
<td class="text-center">
{% if perm in get_role_permissions('technicien') %}
<i class="bi bi-check-circle text-success"></i>
{% else %}
<i class="bi bi-x-circle text-muted"></i>
{% endif %}
</td>
<td class="text-center">
{% if perm in get_role_permissions('demandeur') %}
<i class="bi bi-check-circle text-success"></i>
{% else %}
<i class="bi bi-x-circle text-muted"></i>
{% endif %}
</td>
<td class="text-center">
{% if perm in user_permissions %}
<i class="bi bi-check-circle text-primary"></i>
{% else %}
<i class="bi bi-x-circle text-muted"></i>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}