205 lines
No EOL
9.6 KiB
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 %} |