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 | |
+----------+--------------+------+-----+----------+-------+
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;
}
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.
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.