Bonjour,

Je souhaite développer une application en ligne avec CakePhp 4, et la base repose sur une gestion des utilisateurs et de leurs droits.

Je souhiate donc pouvoir accorder à certains utilisateurs (admin) la possibilité d'autoriser d'autres utilisateurs à accéder aux différentes fonctions de l'application; idéalement, j'aimerai pouvoir accorder à chaque utilisateurs des droits sur chacune des méthodes présentes dans les controleurs.

J'aimerais savoir par où commencer sous CakePhp 4, pour pouvoir gérer ces utilisateurs et leurs droits de manière dynamiques ?

Je me suis rensiegné sur les pluggin d'authentification, d'authorisation et d'ACL mais je ne vois pas comment associer ces éléments pour obtenir le résultat que je cherche.

2 réponses


Tu as plusieurs solutions, mais il me semble que CakePHP ont totalement supprimé le système d'ACL car il posait pas mal de soucis.

Tu peux donc te tourner vers le système de Policies de CakePHP Authorization. Le "mieux" serait pour toi de rajouter une table en hasMany sur ta table user avec les "droits" pour chaque fonction.

exemple (en json, qu'on s'ennuie pas trop) :

{
    username: "User",
    authorizations: [
        {
            name: "posts.update"
        },
        {
            name: "posts.create"
        }
    ]
}

Petit exemple de la Policy :

<?php
namespace App\Policy;

use App\Model\Entity\Article;
use Authorization\IdentityInterface;

class PostPolicy
{
    public function canCreate(IdentityInterface $user, Post $post)
    {
        $authorizations = array_values($user->getOriginalData()->authorizations);
        if (in_array('posts.create', $authorizations)) {
            return true;
        }

        return false;
    }
}

A toi d'adapter en fonction de tes besoins

Lex22
Auteur

Merci beaucoup pour cette piste !! Je comprends mieux comment implémenter cette fonctionnalité maintenant