{# -*- mode: jinja-html -*- #} {# -*- Edition des rôles/permissions -*- #} {% extends "base.j2" %} {% import 'wtf.j2' as wtf %} {% block styles %} {{super()}} <link rel="stylesheet" href="{{ scu.STATIC_DIR }}/css/role_editor.css"> {% endblock %} {% block app_content %} <h1>Définition des rôles et leurs permissions</h1> <div class="help">Les rôles sont associés à un ensemble de permissions. Chaque utilisateur peut avoir un nombre quelconque de rôles <em>dans chaque département</em>. Sur cette page vous pouvez modifier les permissions associée à chaque rôle, ou créer de nouveaux rôles. Les rôles <b>en gras</b> sont les rôles standards de ScoDoc. </div> {# <div class="links"> <a class="stdlink" href="{{ url_for('scodoc.users') }}">liste des comptes utilisateurs</a> </div> #} <main class="roles-editor"> <div class="re-row re-row-titres"> <div class="re-cell role-titre permission-titre"></div> {% for role in roles %} <div class="re-cell role-titre {{'role-standard' if role.name in SCO_ROLES_DEFAULTS else ''}}"> <a class="discretelink" href="{{ url_for('scodoc.role_info', role_name=role.name) }}">{{role.name}}</a> </div> {% endfor %} </div> {% for permission_name in permissions_names %} <div class="re-row re-row-perm"> <div class="re-cell permission-titre" style="position: relative;"> <div class="with_scoplement"> <div><a class="discretelink" href="{{ url_for('scodoc.permission_info', perm_name=permission_name) }}">{{permission_name}}</a></div> <div class="scoplement"> {{ Permission.description.get(permission_name) }} </div> </div> </div> {% for role in roles %} <div class="re-cell {{'role-standard' if role.name in SCO_ROLES_DEFAULTS else ''}}"> <label> <input type="checkbox" name="{{role.id}}-{{Permission.get_by_name(permission_name)}}" data-role="{{role.name}}" data-permission="{{permission_name}}" {{'checked' if role.has_permission(Permission.get_by_name(permission_name)) else ''}} > </label> </div> {% endfor %} </div> {% endfor %} </main> <div> ➕ <a class="stdlink" href="{{url_for('scodoc.role_create')}}">Créer un nouveau rôle</a> </div> <div style="margin-top: 16px;"> 🛟 <a class="stdlink" href="{{url_for('auth.reset_standard_roles_permissions')}}">Remettre les permissions des rôles standards à leurs valeurs par défaut</a> <em>(efface les modifications apportées aux rôles <tt>{{ ', '.join(SCO_ROLES_DEFAULTS.keys()) }}</tt>)</em> </div> <script> async function associe_role_permission(event) { // /role/<string:role_name>/add_permission/<string:perm_name>" const method = event.target.checked ? "/add_permission/" : "/remove_permission/"; const url = `/ScoDoc/api/role/${event.target.dataset.role}${method}${event.target.dataset.permission}`; try { const response = await fetch( url, { method: "POST", } ); const data = await response.json(); if (data.role_name != event.target.dataset.role) { console.error("Fetch error, received:", data); alert("Une erreur est survenue"); location.reload(); } sco_message(`rôle ${event.target.dataset.role} enregistré`); } catch (error) { console.error("Fetch error:", error); sco_message("Erreur réseau: valeur non enregistrée"); } } document.querySelectorAll("label").forEach(btn => { btn.addEventListener("mousedown", (event) => { event.preventDefault() }) }); document.querySelectorAll(".re-cell input").forEach(input => { input.addEventListener("input", associe_role_permission) }); </script> {% endblock %}