feat: roles, permissions, grille full-width, SSO display name
- Admin/roles : tableau des roles avec edition par role (/admin/role/<nom>) - Permissions par role : cases a cocher groupees (Articles, Acces & lecture) - Nouvelles capacites : propose/validate/publish articles (own/all), view_previews - Nom technique auto-genere depuis le label (JS + fallback serveur) - Blocage suppression du dernier administrateur - user_capabilities table ajoutee en DB - Navbar : dropdown unique (nom + Mon identite + Administration + Deconnexion) - SSO callback : preserve le nom personnalise, ne l ecrase plus a la connexion - Grille articles : CSS Grid auto-fill full-width, hauteur uniforme par ligne - CSP : add_files.js et post_confirm.js externalises
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
ob_start();
|
||||
$isAdminRole = ($editRole['name'] === 'admin');
|
||||
?>
|
||||
|
||||
<div class="d-flex align-items-center gap-3 mb-4">
|
||||
<a href="/admin/roles" class="btn btn-secondary btn-sm">← Retour</a>
|
||||
<h1 class="h4 mb-0">Rôle : <?= htmlspecialchars($editRole['label']) ?></h1>
|
||||
<code class="text-muted"><?= htmlspecialchars($editRole['name']) ?></code>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="/admin/role/<?= rawurlencode($editRole['name']) ?>">
|
||||
|
||||
<div class="row g-4">
|
||||
|
||||
<!-- Permissions -->
|
||||
<div class="col-lg-8">
|
||||
|
||||
<?php if ($isAdminRole): ?>
|
||||
<div class="alert alert-warning">
|
||||
Le rôle <code>admin</code> a toutes les permissions implicitement — les cases à cocher sont ignorées.
|
||||
</div>
|
||||
<?php else: ?>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<?php foreach (CAPABILITY_GROUPS as $groupLabel => $groupCaps): ?>
|
||||
<div class="mb-4">
|
||||
<h6 class="fw-semibold text-muted text-uppercase small mb-3"><?= htmlspecialchars($groupLabel) ?></h6>
|
||||
<?php foreach ($groupCaps as $cap): ?>
|
||||
<?php if (!array_key_exists($cap, KNOWN_CAPABILITIES)) continue; ?>
|
||||
<div class="form-check mb-2">
|
||||
<input class="form-check-input" type="checkbox"
|
||||
name="caps[]" value="<?= htmlspecialchars($cap) ?>"
|
||||
id="cap_<?= htmlspecialchars($cap) ?>"
|
||||
<?= in_array($cap, $editRoleCaps, true) ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="cap_<?= htmlspecialchars($cap) ?>">
|
||||
<?= htmlspecialchars(KNOWN_CAPABILITIES[$cap]) ?>
|
||||
</label>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Label + Actions -->
|
||||
<div class="col-lg-4">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<label for="role_label" class="form-label fw-semibold small">Label affiché</label>
|
||||
<input type="text" id="role_label" name="label" class="form-control form-control-sm"
|
||||
value="<?= htmlspecialchars($editRole['label']) ?>" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">Enregistrer</button>
|
||||
<a href="/admin/roles" class="btn btn-outline-secondary w-100 mt-2">Annuler</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<?php
|
||||
$content = ob_get_clean();
|
||||
$title = 'Rôle — ' . $editRole['label'];
|
||||
include __DIR__ . '/layout.php';
|
||||
Reference in New Issue
Block a user