Les permissions s’appliquent systématiquement sur un rôle. Ensuite, chaque utilisateur se voit attribuer un ou plusieurs rôles, dont il hérite les droits d’accès.
Pour des raisons de simplicité et de compréhension, dans une installation par défaut :
La notion de rôle s’efface complètement et les droits d’accès se configurent via un onglet dédié sur la fiche d’un utilisateur :
Il est cependant possible d’activer la gestion des rôles multiples dans le fichier de configuration principal : novius-os.users.enable_roles = true.
Une fois activés, il devient donc possible de partager un rôle entre plusieurs utilisateurs. Les permissions peuvent alors se configurer plus finement :
Il existe deux types de droits d’accès :
Le droit simple a du sens en lui-même, par exemple “Est-ce que je peux ajouter une page ?” ou encore “Est-ce que je peux supprimer une page verrouillée ?”.
Les droits multiples n’ont pas de sens seuls, ils s’expriment uniquement en fonction d’une catégorie. Par exemple, “Est-ce que je peux écrire dans ce dossier ?” a besoin d’une liste de dossiers sur lesquels s’appliquer, ou bien “Est-ce que j’ai accès à cette application ?” a besoin de la liste des applications pour s’exprimer.
Un droit simple est composé d’une seule colonne perm_name, tandis qu’un droit multiple (= droit par catégorie) est composé de deux colonnes : perm_name (comme pour le droit simple) et perm_category_key.
Grâce à ce fichier, chaque application peut définir la liste des permissions qu’elle souhaite configurer.
L’affichage se fait dans une colonne dédiée à droite du nom de l’application lors de l’édition des permissions :
<?php
// Simple : 1 seul argument, le nom de la permission
\Nos\User\Permission::check('noviusos_app::delete_locked');
// Multiple (réglable par catégories) : 2 arguments, le nom de la permission + la clé de la catégorie
\Nos\User\Permission::check('noviusos_app::create_in_folder', $folder_id);
// Gestion de niveau d'accès (avancé, utile quand combiné à des rôles multiples) : 2 arguments, le nom de la permission + le niveau (numérique)
\Nos\User\Permission::atLeast('noviusos_app::level', '2_moderator');
Voir aussi
Documentation d’API pour la classe Permission.
Warning
Le nom de la permission est un élément important. La partie avant les :: doit représenter un nom d’application valide. Pour que la permission soit validée, il faut également que l’utilisateur ait accès à cette application.
Il est possible de cacher des champs en fonction des permissions. Pour cela, il faut utiliser la clé show_when qui définit une fonction de callback retournant si le champ doit être visible ou non.
<?php
return array(
'fields' => array(
'my_field' => array(
'label' => 'My field',
'form' => array(
'type' => 'text',
),
'show_when' => function() {
// The field will only be visible when the user has the requested permission
return Permission::check('my_app::my_permission');
},
),
),
);
Il est possible de désactiver des actions en fonction des permissions grâce à la clé disabled.
<?php
return array(
'data_mapping' => array(/*...*/),
'actions' => array(
'delete' => array(
'label' => __('Delete'),
'primary' => false,
'icon' => 'home',
'action' => array(/*...*/),
'targets' => array(
'grid' => true,
),
'disabled' => array(
function($item) {
return !Permission::check('my_app::can_delete_item') ? __('You don\'t have the permission to delete items.') : false;
}
),
),
),
);