2026-08-21 20:10:29 +02:00
{% extends "base.html" %}
{% block title %}Accès — {{ user.username }}{% endblock %}
{% block content %}
< div class = "container-fluid" >
< h1 > Accès de {{ user.full_name or user.username }}< / h1 >
< form method = "post" >
< input type = "hidden" name = "csrf_token" value = "{{ csrf_token() }}" >
< div class = "card mb-3" >
< div class = "card-header" > < strong > Rôles< / strong > < / div >
< div class = "card-body row g-2" >
< p class = "text-muted" > Les permissions effectives sont l’ union des rôles actifs. Un utilisateur peut cumuler plusieurs rôles.< / p >
{% for role in roles_list %}
< div class = "col-md-3" > < label class = "border rounded p-2 d-block h-100" >
< input type = "checkbox" name = "role_ids" value = "{{ role.id }}" { % if role . id in selected_roles % } checked { % endif % } >
< strong > {{ role.name }}< / strong > < br > < small class = "text-muted" > {{ role.description or 'Rôle disponible dans la GMAO.' }}< / small >
< / label > < / div >
{% else %}< p > Aucun rôle RBAC disponible.< / p > {% endfor %}
< / div >
< / div >
< div class = "card mb-3" >
< div class = "card-header" > < strong > Exceptions individuelles< / strong > < small class = "d-block text-muted" > Hériter utilise les permissions des rôles. Autoriser ajoute un accès ; Refuser reste prioritaire sur les rôles.< / small > < / div >
< div class = "card-body" >
{% for module, permissions in permissions_list|groupby('module') %}
< details class = "mb-3" { % if loop . first % } open { % endif % } >
< summary class = "fw-bold" > {{ module|replace('_', ' ')|title }}< / summary >
< div class = "row g-2 mt-1" >
{% for permission in permissions %}
< div class = "col-xl-4 col-md-6" >
< label class = "small fw-semibold" for = "permission-{{ permission.id }}" > {{ permission.name }}< / label >
< select id = "permission-{{ permission.id }}" class = "form-select form-select-sm" name = "permission_{{ permission.id }}" >
< option value = "" > Hériter< / option >
< option value = "allow" { % if overrides . get ( permission . id ) = = ' allow ' % } selected { % endif % } > Autoriser< / option >
< option value = "deny" { % if overrides . get ( permission . id ) = = ' deny ' % } selected { % endif % } > Refuser< / option >
< / select >
< small class = "text-muted d-block" > {{ permission.description }}< / small >
< small class = "text-secondary" > Accès actuel : < strong > {{ 'AUTORISÉ' if effective.get(permission.code) else 'REFUSÉ' }}< / strong > {% if provenance.get(permission.code) %} · {{ provenance.get(permission.code) }}{% endif %}< / small >
< small class = "text-secondary d-block" > Code : {{ permission.code }}< / small >
< / div >
{% endfor %}
< / div >
< / details >
{% else %}< p > Aucune permission RBAC disponible.< / p > {% endfor %}
< / div >
< / div >
< button class = "btn btn-primary" > Enregistrer les accès< / button >
< a class = "btn btn-outline-secondary ms-2" href = "{{ url_for('admin.users') }}" > Annuler< / a >
< / form >
< / div >
{% endblock %}