Группе пользователей показывать чанк, а другим нет

Есть секция тикетов, есть группа авторов. Надо сделать так, чтобы пользователь из этой группы, залогинившись, видел на странице во фронтенде чанк с TicketForm, а аноним или юзер из другой группы — нет (или видел другой чанк, с hybridauth например).
Как это реализуется, не могу найти. Подскажите пожалуйста!
Алексей Яковлев
19 апреля 2016, 15:08
modx.pro
3
2 470
+1

Комментарии: 7

Алексей Яковлев
19 апреля 2016, 20:02
0
Оказывается пора осваивать группы ресурсов. Сделал группу ресурсов с правами для группы авторов и добавил в нее страницу. Анонимам она не видна, залогинившимся юзерам из группы видна. Жить можно. В идеале я представляю себе надпись во фронтенде «опубликовать текст», которая видна только залогиненным юзерам из нужной группы, а всем остальным, допустим выводится пустой чанк. Ну а за надписью скрывается TicketForm, опять же, доступный только правильным авторам. Но как выводить чанк с такой ссылкой в зависимости от авторизованности юзера? Пока не понятно.
    Дмитрий Кондаков
    19 апреля 2016, 20:21
    1
    +1
    Юзай fenom, пример:
    {if 0 | ismember : 'Administrator'}
      ты админ
    {else}
      ты юзер
    {/if}
      Алексей Яковлев
      19 апреля 2016, 20:29
      0
      О, fenom! Не дорос я еще. Мне б такую же конструкцию, только
      if юзер залогинен
      	if юзер из группы "Авторы"
      		чанк "привет"
      	/if
      else
      	chunk "логинся"
      /if
      Только в виде, который я могу в шаблон документа вставить, ну или в виде сниппета, со сниппетами вроде научился )
    Алексей Яковлев
    19 апреля 2016, 20:35
    0
    о, кажется нашел: modx.pro/help/4618/
      Николай Загумённов
      20 апреля 2016, 15:44
      +2
      Сниппет
      <?php
      // Сниппет проверяет, состоит ли тот или иной юзер в группе из параметра "&if"  v0.01 Beta
      
      // Подключаем pdoTools для работы с инлайновыми чанками
      $pdo = $modx->getService('pdoTools');
      
      $uid = $modx->getOption('uid', $scriptProperties, (int) $_GET['user']); // пишем id user'а
      if($uid=='') { $uid = $modx->user->get('id'); }
      if($uid=='') { return ''; }
      
      $if = $modx->getOption('if', $scriptProperties, ''); // пишем параметр if
      $then = $modx->getOption('then', $scriptProperties, ''); // пишем параметр then
      $else = $modx->getOption('else', $scriptProperties, ''); // пишем параметр else
      $thenChunk = $modx->getOption('thenChunk', $scriptProperties, ''); // пишем параметр thenChunk
      $elseChunk = $modx->getOption('elseChunk', $scriptProperties, ''); // пишем параметр elseChunk
      
      // Есть ли юзер
      if($modx->getCount('modUser', array('id'=>$uid))) {  } else { $uid = $modx->user->get('id'); }
      
      // Дёргаем данные
      $user = $modx->getObject('modUser', array('id' => $uid));
      
      if(is_object($user)) {
      	// Получаем группы
      	$groups = $user->getUserGroups();
      	
      	// Разбиваем на элементы массива
      	$ifAr = explode(',', $if);
      	
      	// Проверяем принадлежность групп юзера к группам указанным в параметрах сниппета
      	$return = false;
      	for($i=0; $i<count($groups); $i++)
      	{
      		for($a=0; $a<count($ifAr); $a++)
      		{
      			if($ifAr[$a] == $groups[$i]) {
      				$return = true;
      			}
      		}
      	}
      	
      	// Возвращаем.... либо true/false, либо $then/$else....
      	if($return) {
      		if($thenChunk!='') {
      			return $pdo->getChunk($thenChunk);
      		} else {
      			return ($then!='' ? $then : $return);
      		}
      	} else {
      		if($elseChunk!='') {
      			return $pdo->getChunk($elseChunk);
      		} else {
      			return ($else!='' ? $else : $return);
      		}
      	}
      } else {
      	return '';
      }
      Пример вызова:

      [[!ifUserGroup?
      	&if=`1`// id группы пользователей
      	&then=`
      		<div class="list-group">
      		[[!pdoPage:default=`Нет новых`?
      			&element=`getTickets`
      			&parents=`1147`
      			&showUnpublished=`1`
      			&limit=`30`
      			&tpl=`tpl.Tickets.list.row`
      			&sortby=`{"published":"ASC","createdon":"DESC"}`					
      		]]
      				
      	</div>
      		<div class="clear"></div>
      		[[!+page.nav]]
      			`
      			&elseChunk=`@INLINE <div class="alert alert-danger"><h4>У Вас недостаточно прав для просмотра этого раздела.</h4><p>Советуем Вам <a href="[[~1150?action=`auth/logout`]]" class="alert-link">выйти</a> и авторизоваться в аккаунте, который имеет права для просмотра защищённого содержимого.</p></div>`
      		]]
      Может пригодится =)
      Хотя феном более красив)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7