Проверка прав доступа

Предупреждение

Как указано на странице, этот метод работает только для предоставления права записи к сущностям. Вы не можете использовать этот метод для извлечения или просмотра сущностей, к которым у пользователя нет права чтения.

Elgg предоставляет механизм переопределения проверки прав записи через событие permissions_check. Это полезно для разрешения плагину записи ко всем доступным сущностям независимо от настроек доступа. Однако сущности, которые скрыты, всё равно будут недоступны для плагина.

Расширение permissions_check

В вашем плагине вы должны зарегистрировать событие для permissions_check.

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

Функция переопределения

Теперь создайте функцию, которая будет вызываться событием проверки прав доступа. В этой функции мы определяем, имеет ли сущность (в параметрах) право записи. Поскольку важно поддерживать безопасность Elgg, право записи должно предоставляться только после проверки различных ситуаций, включая контекст страницы, авторизованного пользователя и т.д. Обратите внимание, что эта функция может возвращать 3 значения: true, если сущность имеет право записи, false, если сущность не имеет, и null, если этот плагин не заботится и система безопасности должна проконсультироваться с другими плагинами.

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;
}

Полный пример

Это полный пример использования контекста для определения, имеет ли сущность право записи.

<?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');