Проверка прав доступа
Предупреждение
Как указано на странице, этот метод работает только для предоставления права записи к сущностям. Вы не можете использовать этот метод для извлечения или просмотра сущностей, к которым у пользователя нет права чтения.
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');