nilsframework/nils-roles

Module de gestion des rôles et permissions pour NilsFramework — single et multi-rôles configurable

Maintainers

Package info

gitlab.com/groupe11512549/nils-roles

Issues

pkg:composer/nilsframework/nils-roles

Statistics

Installs: 10

Dependents: 0

Suggesters: 0

Stars: 0

dev-main 2026-04-19 18:20 UTC

This package is not auto-updated.

Last update: 2026-04-20 11:29:09 UTC


README

Module de gestion des rôles et permissions pour NilsFramework.
Supporte le mode single rôle (défaut) et multi-rôles configurable via config.json.

📋 Table des matières

Installation

composer require nilsframework/nils-roles

Configuration

Dans Configuration/config.json :

{
    "auth": {
        "multi_roles": false
    }
}
ValeurComportement
false (défaut)Un user = un seul rôle → colonne role_id dans nils_users
trueUn user = plusieurs rôles → table pivot nils_user_roles

Migration SQL

mysql -u root -p ma_base < vendor/nilsframework/nils-roles/migrations/roles_tables.sql

Mode single (défaut) — décommentez dans le SQL :

ALTER TABLE nils_users ADD COLUMN role_id BIGINT UNSIGNED NULL AFTER actif;
ALTER TABLE nils_users ADD FOREIGN KEY (role_id) REFERENCES nils_roles(id) ON DELETE SET NULL;

Tables créées :

TableDescription
nils_rolesRôles (admin, membre...)
nils_permissionsPermissions (users.voir, groupes.creer...)
nils_role_permissionsPivot rôle ↔ permission
nils_user_rolesPivot user ↔ rôles (mode multi uniquement)

Intégration dans le routeur

Dans core/Routeur.php, dans diriger(), après le bloc #[Auth] :

foreach ($refMethodAuth->getAttributes() as $attr) {
    $instance = $attr->newInstance();

    // Auth
    if ($instance instanceof \NilsAuth\Auth) {
        $headers       = new \core\Headers($requete->headers);
        $requete->auth = \NilsAuth\AuthMiddleware::verifier($headers, $instance->guard);
    }

    // HasRole
    if ($instance instanceof \NilsRoles\HasRole && $requete->auth) {
        \NilsRoles\RoleMiddleware::verifierRole($requete->auth, $instance->role);
    }

    // HasPermission
    if ($instance instanceof \NilsRoles\HasPermission && $requete->auth) {
        \NilsRoles\RoleMiddleware::verifierPermission($requete->auth, $instance->permission);
    }
}

Utilisation sur les routes

use NilsAuth\Auth;
use NilsRoles\HasRole;
use NilsRoles\HasPermission;

// Connecté uniquement
#[Get('/profile'), Auth]
public function profile(array $auth): void { }

// Rôle requis
#[Get('/admin'), Auth, HasRole('admin')]
public function admin(array $auth): void { }

// Permission requise
#[Get('/users'), Auth, HasPermission('users.voir')]
public function users(array $auth): void { }

// Rôle + permission
#[Delete('/users/{id}'), Auth, HasRole('admin'), HasPermission('users.supprimer')]
public function destroy(Params $params, array $auth): void { }

// Wildcard
#[Get('/users'), Auth, HasPermission('users.*')]
public function index(array $auth): void { }

RoleService

use NilsRoles\RoleService;

// Rôles d'un user
$roles = RoleService::rolesUtilisateur($userId);
// ['admin', 'moderateur']

// Vérifier un rôle
$ok = RoleService::aRole($userId, 'admin'); // bool

// Permissions d'un user
$perms = RoleService::permissionsUtilisateur($userId);
// ['users.voir', 'users.creer', 'groupes.voir']

// Vérifier une permission
$ok = RoleService::aPermission($userId, 'users.voir'); // bool

// Assigner un rôle
RoleService::assignerRole($userId, $roleId);

// Retirer un rôle (mode multi uniquement)
RoleService::retirerRole($userId, $roleId);

Routes disponibles

Rôles

MéthodeRouteDescription
GET/rolesListe des rôles
POST/rolesCréer un rôle
GET/roles/{id}Détail + permissions
PATCH/roles/{id}Modifier un rôle
DELETE/roles/{id}Supprimer un rôle
POST/roles/{id}/permissions/{perm_id}Assigner une permission
DELETE/roles/{id}/permissions/{perm_id}Retirer une permission

Permissions

MéthodeRouteDescription
GET/permissionsListe des permissions
POST/permissionsCréer une permission
GET/permissions/{id}Détail
PATCH/permissions/{id}Modifier
DELETE/permissions/{id}Supprimer

Utilisateurs

MéthodeRouteDescription
GET/users/{id}/rolesRôles d'un user
GET/users/{id}/permissionsPermissions d'un user
POST/users/{id}/roles/{role_id}Assigner un rôle
DELETE/users/{id}/roles/{role_id}Retirer un rôle (multi)

Wildcard permissions

// users.* → couvre users.voir, users.creer, users.modifier, users.supprimer
HasPermission('users.*')

// *.voir → couvre users.voir, groupes.voir, roles.voir
HasPermission('*.voir')

// Match exact
HasPermission('users.voir')

Licence

MIT — © NilsFramework