49 lines
3 KiB
HTML
49 lines
3 KiB
HTML
{% 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 %}
|