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 permettant de remplacer la vérification des autorisations d’écriture via l’événement permissions_check . Ceci est utile pour permettre l’écriture du plugin sur toutes les entités accessibles, quels que soient les paramètres d’accès. Cependant, les entités masquées ne seront toujours pas disponibles pour le plugin.

Étendre permissions_check

Dans votre plugin, vous devez enregistrer l’événement pour permissions_check.

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

La fonction de substitution

Créez maintenant la fonction qui sera appelée par l’événement de vérification des autorisations. Dans cette fonction, nous déterminons si l’entité (dans les paramètres) a un accès en écriture. Puisqu’il est important de garantir la sécurité d’Elgg, l’accès en écriture ne doit être accordé qu’après avoir vérifié diverses situations, notamment le contexte de la page, l’utilisateur connecté, etc. Notez que cette fonction peut renvoyer 3 valeurs : true si l’entité a un accès en écriture, false si l’entité ne l’a pas, et null si ce plugin ne s’en préoccupe pas et que le système de sécurité devrait consulter d’autres plugins.

function myplugin_permissions_check(\Elgg\Event $event) {
   $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_event_handler('permissions_check', 'all', 'myaccess_permissions_check');

   // Register cron event
   elgg_register_event_handler('cron', elgg_get_plugin_setting('period', 'myaccess', 'fiveminute'), 'myaccess_cron');
}

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

   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\Event $event) {
   if (elgg_in_context('myaccess_cron')) {
      return true;
   }

   return null;
}

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