Vérification des permissions

Avertissement

Comme indiqué dans la page, cette méthode fonctionne seulement pour accorder le droit d’accès en écriture (write) 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’é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.

Modifier les permission d’accès avec un hook dans 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 à l’écriture, false si l’entité ne le fait 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($hook_name, $entity_type, $return_value, $parameters) {
   $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é a un accès en écriture.

<?php

function myaccess_init() {
   // Register cron hook
   if (!elgg_get_plugin_setting('period', 'myaccess')) {
      elgg_set_plugin_setting('period', 'fiveminute', 'myaccess');
   }

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

   elgg_register_plugin_hook_handler('cron', elgg_get_plugin_setting('period', 'myaccess'), 'myaccess_cron');
}

/**
 * Hook for cron event.
 */
function myaccess_cron($event, $object_type, $object) {

   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($hook_name, $entity_type, $return_value, $parameters) {
   if (elgg_in_context('myaccess_cron')) {
      return true;
   }

   return null;
}

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