Bonjour,
J'ai mis en place un gestionnaire de fichiers simple, avec des restrictions.
La boutique 1 va uploader des fichiers que la boutique 2 ne va pas pouvoir 'consulter, editer, spurrimer' à traver ses utilisateurs respectifs.

Mes tables

files

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| store_id   | char(36)         | NO   |     |         |                |
| name       | varchar(90)      | YES  |     | NULL    |                |
| path       | varchar(255)     | NO   |     |         |                |
| path_thumb | varchar(255)     | YES  |     | NULL    |                |
| url        | varchar(255)     | NO   |     |         |                |
| thumb      | varchar(255)     | YES  |     | NULL    |                |
| created    | datetime         | YES  |     | NULL    |                |
| modified   | datetime         | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

stores

+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | char(36)     | NO   | PRI |         |       |
| active     | tinyint(1)   | YES  |     | NULL    |       |
| name       | varchar(90)  | YES  |     | NULL    |       |
| address_id | char(36)     | YES  |     | NULL    |       |
| url        | varchar(255) | YES  |     | NULL    |       |
| email      | varchar(90)  | YES  |     | NULL    |       |
| created    | datetime     | YES  |     | NULL    |       |
| modified   | datetime     | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+

stores_users

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| store_id | char(36)         | YES  |     | NULL    |                |
| user_id  | char(36)         | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

users

+----------+--------------+------+-----+----------+-------+
| Field    | Type         | Null | Key | Default  | Extra |
+----------+--------------+------+-----+----------+-------+
| id       | char(36)     | NO   | PRI |          |       |
| name     | varchar(180) | YES  |     | NULL     |       |
| email    | varchar(150) | NO   |     |          |       |
| tel      | varchar(90)  | NO   |     |          |       |
| password | varchar(255) | NO   |     | NULL     |       |
| role     | varchar(20)  | YES  |     | customer |       |
| active   | tinyint(1)   | YES  |     | 0        |       |
| created  | datetime     | NO   |     | NULL     |       |
| modified | datetime     | YES  |     | NULL     |       |
+----------+--------------+------+-----+----------+-------+

Ce que je fais

Je fais une function dans mon AppController :

    $this->loadComponent('Auth', [
        'authorize' => ['Controller'],
        'loginRedirect' => [
            'controller' => 'Pages',
            'action' => 'index'
        ],
        'logoutRedirect' => [
            'controller' => 'Pages',
            'action' => 'index'
        ]
    ]);

    [...]
    public function isAuthorized($user)
    {

        if (isset($user['role']) && $user['role'] === 'admin' || $user['role'] === 'webmaster') {
            return true;
        }

        return false;
    }

Ce que je veux

J'aimerais faire une fonction accessible à l'ensemble de mes controllers (dans un fichier qui respecte les conventions de CakePHP 3)
cette fonction aura pour but de renvoyer true/false si l'utilisateur en cours a bien son id dans la table stores_users et que cela corespond bien au store_id de la table files (il n'y a pas que files en table, mais aussi products, tags, ...).

ex : dans le Appcontroller j'ai mon isAuthorized($user) et dans mes autres controllers un truc du genre :

    public function isAuthorized($user)
    {

        if (in_array($this->request->action, ['index', 'view', 'edit', 'add', 'delete'])) {
            if(user_a_le_droit_car_il_possède_bien_la_boutique_X_et_donc_il_peut_editer_les_fichiers == true){
                return true;
            }
        }
        return parent::isAuthorized($user);
    }

Là je pare de la table files mais j'ai de nombreuse autres tables qui ont store_id pour filter les données.

Ce que j'obtiens

Pour faire la vérification sur une table par controller je n'ai pas trop de souci, mais c'est pour éviter les répétitions à ralonge dans tous mes controllers que je souhaite votre avis d'expert.

Merci pour le temps que vous allez consacrer à ma question.

Aucune réponse