Сниппет проверки прав доступа по группам
Простой сниппет для проверки прав доступа, при выполнении которого выводится чанк.
Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
Доступные параметры:
&allowGroups — id групп, которые должны получить доступ к чанку
&allowAuthor — 1 или 0, определяет, выдавать ли доступ к чанку автору страницы
&tpl — название подгружаемого шаблона при выполнении условий
Пример вызова:
Сниппет (getAccess):
P.s. Буду рад любым советам по оптимизации кода.)
Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
Доступные параметры:
&allowGroups — id групп, которые должны получить доступ к чанку
&allowAuthor — 1 или 0, определяет, выдавать ли доступ к чанку автору страницы
&tpl — название подгружаемого шаблона при выполнении условий
Пример вызова:
[[!getAccess? &allowGroups=`1,3` &allowAuthor=`1` &tpl=`gallery.Edit`]]
Сниппет (getAccess):
<?php
$user = (!empty($userId)) ? $modx->getObject('modUser', $userId) : $modx->user;
if (is_object($user) && $modx->user->isAuthenticated('web')) {
$allowGroups = explode(",", $allowGroups);
$userGroups = array();
$userGroups = $modx->user->getUserGroups();
if ($allowAuthor == '1' && $modx->resource->get('createdby') == $user->get('id')) {
return $modx->getChunk($tpl);
break;
}
foreach($allowGroups as $check) {
if (in_array($check, $userGroups)) {
return $modx->getChunk($tpl);
break;
}
}
return;
}
else {
return;
}
P.s. Буду рад любым советам по оптимизации кода.)
Комментарии: 7
В принципе это урезанный аналог modx.com/extras/package/personalize
$modx->resource->getOne('CreatedBy')->get('id')
— в этом нет смысла, т.к. createdby это итак id, т.е. достаточно$modx->resource->get('createdby')
спасибо, поправил.)
Очень удобная штука! Попробую её использовать у себя, спасибо!
Можно вопрос: а почему вы решили свой сниппет написать, а не использовать Personalize?
Можно вопрос: а почему вы решили свой сниппет написать, а не использовать Personalize?
Если честно, просто не знал о нем, а поставленная цель казалась не слишком сложной, чтобы искать решение извне.
Да и атмосфера modx'а и написания сайта на нем способствует написанию своих решений, как по мне..)
Да и атмосфера modx'а и написания сайта на нем способствует написанию своих решений, как по мне..)
Понимаю, я тоже вначале подобное (но более корявое) решение сделал, пока не нашел Personalize…
В Personalize есть удобная штука @CODE:, которая позволяет писать код прямо в вызове, а не плодить чанки. Похожее есть и у pdoTools — @INLINE
Тут такой возможности нету, да?
Тут такой возможности нету, да?
Я понимаю, сниппет функциональнее, но там где нужно просто проверить группу пользователя будет проще использовать
[[+modx.user.id:memberof=`Administrator`:then=`[[$chunk-or-code]]`]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.