Calcul des permissions

De MoodleDocs
Aller à :navigation, rechercher


Cette page détaille le processus d'évaluation des permissions de Moodle, version 2.0 et ultérieures. Il est toujours valable avec la version 3.11 de Moodle.

Évaluation des permissions

L'algorithme d'évaluation des permissions de Moodle est implémenté par la fonction has_capability() (qui appelle elle-même la fonction has_capability_in_accessdata()), dans le fichier lib/accesslib.php. Cette fonction retourne true si une capacité donnée est permise pour l'utilisateur, et false dans le cas contraire.

Le fonctionnement, détaillé ci-dessous, peut être résumé de la façon suivante : on évalue les droits d'accès séparément pour chaque rôle, puis on vérifie si l'utilisateur a au moins un rôle avec autorisation et en même temps aucun rôle avec interdiction.

Algorithme de calcul de la permission pour une capacité

  1. On vérifie si l'utilisateur est un administrateur. Si c'est le cas, la fonction retourne true et l'algorithme se termine.
  2. On construit la liste de toutes les attributions de rôle de l'utilisateur dans le contexte actuel et tous les contextes supérieurs.
  3. On détermine tous les rôles qui comportent la capacité donnée dans leur définition ou dans une dérogation, pour le contexte actuel et tous les contextes supérieurs (sans tenir compte de l'utilisateur).
  4. Pour chacun des rôles trouvé à l'étape précédente, on évalue séparément la permission définie dans le contexte actuel et tous les contextes supérieurs, en commençant par le contexte le plus spécifique. On ne tient pas compte de l'utilisateur. Ceci détermine si le rôle est autorisé pour cette capacité.
    • Dès qu'un ALLOW est trouvé pour un des contextes dans une des définitions ou des dérogations du rôle donné, le rôle est autorisé, ...
    • ... à moins qu'une valeur PROHIBIT (interdire) ne soit détectée dans un des contextes supérieur (n'importe lequel), auquel cas le rôle est interdit.
  5. La fonction has_capability() retourne true, c'est-à-dire que la capacité est permise pour l'utilisateur dans le contexte actuel, s'il possède simultanément au moins un rôle autorisé et aucun rôle interdit. Dans tous les autres cas (p.ex. aucun rôle autorisé, un rôle interdit), la fonction retourne false.

Illustration

Voici un exemple de fonctionnement de l'algorithme. La situation est la suivante :

  • l'utilisateur Victor Hugo a dans le cours le rôle Étudiant ;
  • on a attribué à Victor Hugo le rôle Enseignant non éditeur dans un forum de ce cours ;
  • dans ce forum, une dérogation au rôle Enseignant non éditeur a été définie, en définissant PREVENT pour la permission de mod/forum:rate.
  • on aimerait savoir si Victor Hugo peut évaluer les messages de ce forum. La capacité testée est mod/forum:rate.

On construit les tableaux ci-dessous.

roles.png

Discussion

Victor Hugo n'est pas un administrateur, donc on continue le processus.

Dans le contexte du forum, Victor Hugo possède les 2 rôles d'étudiant et d'enseignant non éditeur (étape 1). Les définitions de rôles et la dérogation permettent de construire le tableau des permissions (étape 2), qui à son tour permet de construire les rôles autorisés par contexte (étape 3).

On constate que Victor Hugo possède pour la capacité étudiée un rôle autorisé dans le contexte du forum (à savoir le rôle d'étudiant) et aucun rôle interdit. Il aura donc en conséquence la permission d'évaluer les messages des forums.


Voir aussi