CakePHP 3 : User isAuthorized() or not

Par Bed0sk!l, il y a 10 ans


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