Сниппет проверки прав доступа по группам
        Простой сниппет для проверки прав доступа, при выполнении которого выводится чанк. 
Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
Доступные параметры:
&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]]`]]            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.