par
Saian » 27 mai 2020, 23:37
C'est possible oui. Il n'y a pas qu'une façon de le faire mais tu peux par exemple attribuer un tableau de privilèges à l'utilisateur.
Pour stocker l'information dans la base de données tu peux sérialiser le tableau. Ca transforme le tableau sous forme de chaine de caractères que tu peux stocker dans une colonne de type text.
// exemple d'insert (je mets pas toutes les colonnes mais tu vois l'idée)
$statement = $pdo->prepare('INSERT INTO users SET privileges = :privileges');
$statement->execute([
'privileges' => serialize([ 'adm', 'vip' ])
]);
Lorsque tu récupères la ligne, tu peux alors désérialiser cette chaine pour récupérer le tableau.
class user {
public function __construct() {
$this->privileges = unserialize($this->privileges);
}
public function hasPrivilege($privilege) {
return in_array($privilege, $this->privileges);
}
}
Tu pourrais ensuite ajouter des méthodes de tests pour les différents tests (possède ce privilège, possède un de ces privilèges, possède tous ces privilèges).
class user {
// ...
public function hasOnePrivilegeIn($privileges) {
return count(array_intersect($privileges, $this->privileges));
}
public function hasAllPrivilegesIn($privileges) {
return count($privileges) == count(array_intersect($privileges, $this->privileges));
}
}
Tu pourrais aussi imaginer une hiérarchie de privilèges. adm possède les droits vip et usr, vip possède les droits usr et usr possède seulement les droits usr, mais je vais m'arrêter la.
C'est possible oui. Il n'y a pas qu'une façon de le faire mais tu peux par exemple attribuer un tableau de privilèges à l'utilisateur.
Pour stocker l'information dans la base de données tu peux sérialiser le tableau. Ca transforme le tableau sous forme de chaine de caractères que tu peux stocker dans une colonne de type text.
[PHP]// exemple d'insert (je mets pas toutes les colonnes mais tu vois l'idée)
$statement = $pdo->prepare('INSERT INTO users SET privileges = :privileges');
$statement->execute([
'privileges' => serialize([ 'adm', 'vip' ])
]);[/PHP]
Lorsque tu récupères la ligne, tu peux alors désérialiser cette chaine pour récupérer le tableau.
[PHP]class user {
public function __construct() {
$this->privileges = unserialize($this->privileges);
}
public function hasPrivilege($privilege) {
return in_array($privilege, $this->privileges);
}
}[/PHP]
Tu pourrais ensuite ajouter des méthodes de tests pour les différents tests (possède ce privilège, possède un de ces privilèges, possède tous ces privilèges).
[PHP]class user {
// ...
public function hasOnePrivilegeIn($privileges) {
return count(array_intersect($privileges, $this->privileges));
}
public function hasAllPrivilegesIn($privileges) {
return count($privileges) == count(array_intersect($privileges, $this->privileges));
}
}[/PHP]
Tu pourrais aussi imaginer une hiérarchie de privilèges. adm possède les droits vip et usr, vip possède les droits usr et usr possède seulement les droits usr, mais je vais m'arrêter la.