вторник, 24 сентября 2013 г.

Битрикс. Принадлежность пользователя к группе.

Часто требуется проверить принадлежность пользователя к определённой группе. Первой мыслью проскакивает следующий алгоритм
1. проверяем если пользователь авторизован
2. получаем группы для него
3. проверяем in_array нужной группы в массиве групп, полученных на втором шаге.
То есть, грубо говоря, вот так
if ($USER->IsAuthorized())
{
 $arGroups = CUser::GetUserGroup($USER->GetID());
 if (in_array(USERGROUP_MODER, $arGroups ))
 {
  //ставим нужные разрешения
 }
}

Однако, в этих же целях бывает удобнее использовать CSite::InGroup(array $groups). В лучших традициях Битрикса эта функция хоть и присутствует в документации, но описанием там и не пахнет =)
Допустим, нам нужно разрешение на правку, если юзверь является Модератором или Админом.
if (CSite::InGroup(array(USERGROUP_MODER, USERGROUP_ADMIN)))
{
 //ставим нужные разрешения
}

Заметим, что логика в обработке массива групп - ИЛИ.