Vérification des permissions

Avertissement

Comme indiqué dans la page, cette méthode fonctionne seulement pour accorder le droit d’accès en écriture sur les entités. Vous ne pouvez pas utiliser cette méthode pour récupérer ou afficher des entités pour lesquelles l’utilisateur n’a pas d’accès en lecture.

Elgg fournit un mécanisme de vérification des autorisations d’accès en écriture via le hook plugin permissions_check . Ceci est utile pour permettre à un plugin d’écrire sur toutes les entités accessibles indépendamment des autorisations d’accès. Les entités qui sont masquées, cependant, ne seront pas accessibles au plugin.

Modification des permissions d’accès - permissions_check

Dans votre plugin, vous devez enregistrer le hook plugin pour permissions_check.

elgg_register_plugin_hook_handler('permissions_check', 'all', 'myplugin_permissions_check');

La fonction de substitution

Créez maintenant la fonction qui sera appelée par le hook de contrôle des permission. Dans cette fonction, nous déterminons si l’entité (dans les paramètres) a accès à l’écriture. Étant donné qu’il est important de garder Elgg sécurisé, l’accès à l’écriture ne doit être donné qu’après vérification d’une variété de situations, y compris le contexte de la page, l’identification de l’utilisateur, etc. Notez que cette fonction peut renvoyer 3 valeurs : true si l’entité a l’accès en écriture, false si l’entité ne l’a pas, et null si ce plugin ne s’en soucie pas et que le système de sécurité doit consulter d’autres plugins.

function myplugin_permissions_check(\Elgg\Hook $hook) {
   $has_access = determine_access_somehow();

   if ($has_access === true) {
      return true;
   } else if ($has_access === false) {
      return false;
   }

   return null;
}

Exemple complet

Voici un exemple complet utilisant le contexte pour déterminer si l’entité dispose d’un accès en écriture.

<?php

function myaccess_init() {
   // override permissions for the myaccess context
   elgg_register_plugin_hook_handler('permissions_check', 'all', 'myaccess_permissions_check');

   // Register cron hook
   elgg_register_plugin_hook_handler('cron', elgg_get_plugin_setting('period', 'myaccess', 'fiveminute'), 'myaccess_cron');
}

/**
 * Hook for cron event.
 */
function myaccess_cron(\Elgg\Hook $hook) {

   elgg_push_context('myaccess_cron');

   // returns all entities regardless of access permissions.
   // will NOT return hidden entities.
   $entities = get_entities();

   elgg_pop_context();
}

/**
 * Overrides default permissions for the myaccess context
 */
function myaccess_permissions_check(\Elgg\Hook $hook) {
   if (elgg_in_context('myaccess_cron')) {
      return true;
   }

   return null;
}

// Initialise plugin
register_elgg_event_handler('init', 'system', 'myaccess_init');