Droits de paramétrage d'un plugin module d'activité

Droits de paramétrage d'un plugin module d'activité

par Gabrielle Guevara,
Nombre de réponses : 4
Bonjour à tous,
J'ai un gros problème côté dev sur un plugin type module d'activité que j'ai créé en Moodle 4.0+

Il y a des paramètres globaux (email d'un gestionnaire et ville par défaut) qui doivent doit être entrés dans le paramétrage global du plugin et non dans l'activité directement, donc dans l'administration.
J'ai donc mis ces paramètres dans le settings.php de mon activité.

Ils sont bien visibles et modifiables par les administrateurs de la plateforme, cependant je n'arrive pas à l'afficher pour les gestionnaires qui n'ont pas le droit site:config.

On ne veux pas leur donner ce rôle car trop de pouvoir, mais d'un autre côté il faut qu'ils puissent modifier eux même ce paramètre.
Est-ce que quelqu'un a déjà eu un problème similaire ?

On avait réussi a afficher un plugin local pour des gestionnaires grâce à un bout de code dans le settings.php du plugin local en question, cependant c'est car dans le admin/settings/plugins.php il y a un "laisser passer" pour les plugins locaux ligne 785

// Extend settings for each local plugin. Note that their settings may be in any part of the
// settings tree and may be visible not only for administrators.
$plugins = core_plugin_manager::instance()->get_plugins_of_type('local');
core_collator::asort_objects_by_property($plugins, 'displayname');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\local $plugin */
$plugin->load_settings($ADMIN, null, $hassiteconfig);
}

On ne vérifie pas le $hassiteconfig, la fonction load_settings pour les plugins locaux ne vérifiant pas non plus les droits.

Voilà je pense avoir tout dis, si quelqu'un a une idée je suis preneuse !
Merci d'avance.
Bonne journée à tous.
Gabrielle

Moyenne des évaluations  -
En réponse à Gabrielle Guevara

Re: Droits de paramétrage d'un plugin module d'activité

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

AMHA, vous vous y prenez mal. Ce n'est pas une bonne pratique de développement Moodle que de tester si un utilisateur a tel ou tel rôle. Il faut tester s'il a telle ou telle capacité. Voir la doc développeur.

  1. Créer dans le plugin la/les capacité(s) nécessaires (dans le fichier db/access.php) avec les réglages adéquats
  2. Dans le code, vérifier si l'utilisateur a la capacité en question avec has_capability()

Voir par exemple le plugin tool_moodlebox (https://github.com/moodlebox/moodle-tool_moodlebox).

Moyenne des évaluations Utile (1)
En réponse à Nicolas Martignoni

Re: Droits de paramétrage d'un plugin module d'activité

par Gabrielle Guevara,
Bonjour Nicolas,
Merci beaucoup de ta réponse !
En faite je me suis mal exprimée, c'est justement ce que l'on veut de pouvoir tester les capacités des utilisateurs.rices.

Notre problème ici c'est que nos admin ont la capacité 'moodle/site:config' qui leur permet de voir la liste des différents plugins et leurs paramètres, et nos gestionnaires n'ont pas cette fameuse capacité.
Si iels l'avais, iels pourraient voir et modifier les paramètres de notre plugin module d'activité.
Mais cette capacité permet de voir tous les types de plugins, or nous nous ne voulons qu'iels puissent voir que les modules d'activité.

Et comme la lecture des settings des modules d'activités se fait seulement dans le noyaux de moodle (dans admin/settings/plugins.php) et seulement pour les personnes ayant la capacité 'moodle/site:config', nous sommes bloqués.

Nous avons trouvé une solution justement en modifiant le noyau de moodle et d'y rajouter un nouveau droit 'moodle/mod:config', ça a déjà été fait pour les plugins de type question donc j'imagine que ça pourrait être envisageable de faire une pull request pour l'intégrer à la prochaine version, qu'en penses tu ? 

Ci dessous ma proposition de modification du fichier admin/settings/plugins.php, à gauche la version originale, à droite mon ajout.

Code de padmin/settings/plugins.php avant et après correction


Et ce nouveau droit moodle/mod:config dans le fichier lib/db/access.php (le moodle/question:config existe déjà)

Nouveau droit moodle/mod:config


On pourrait imaginer faire de même avec tous les types de plugins, les blocs, les courses formats, etc. Pour que ce soit en effet réglable selon les capacités des utilisateurs et non seulement pour les personnes ayant la capacité moodle/site:config

 

En réponse à Gabrielle Guevara

Re: Droits de paramétrage d'un plugin module d'activité

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Gabrielle,
Déjà, je voudrais expliciter un point : les Admin n'ont pas de rôle défini dans Moodle puisqu'il échappe à tout calcul de permissions. Et heureusement !
En revanche, les Gestionnaires, pourquoi pas.
Donc je pense que de ce point de vue là, il y a une incompréhension quelque part.

Patrick
En réponse à Patrick Lemaire

Re: Droits de paramétrage d'un plugin module d'activité

par Gabrielle Guevara,
Bonjour Patrick,
Merci de ta réponse.
Oui en effet je me suis un peu embrouillée les pinceaux dans mes explications.
En fait pour résumé notre problème est dans le cas où quelqu'un n'est pas admin mais à qui on veux donner des droits sur certaines rubriques de l'administration mais pas toutes.
En soit ce serait décomposer le droit moodle/site:config en plusieurs moodle/plugintype:config.

En solution provisoire de notre côté nous avons créer un plugin local "config_capabilities" qui créé ces nouveaux droits puis dans ses settings rajoute le bout de code de moodle/admin/settings/plugins.php qui ajoute la section des modules d'activité dans l'admin SI on a la capacité local/config_capabilities:modconfig MAIS PAS la capacité moodle/site:config (pour éviter que ce bout de code s'exécute deux fois si on a les deux rôles)



Car nous ne voulions pas toucher au noyaux moodle.
Je vais aussi essayer de soumettre notre idée de modification du noyaux dans le tracker (c'est la première fois que je soumet du code donc je ne suis pas sûre de le faire correctement du premier coup 😅)