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.

É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.

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. On évalue si, avec les définitions standards des rôles et capacités (et sans dérogation), un utilisateur ayant le rôle d'enseignant a le droit d'évaluer les messages des forums.

  • L'utilisateur Victor Hugo a dans le cours le rôle Étudiant
  • L'utilisateur Victor Hugo a dans le forum le rôle Enseignant non éditeur
  • Dans le 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.
  • La capacité testée est mod/forum:rate
  • Le contexte est celui d'un forum dans un cours.

roles.png

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 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.