Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:controllers:user

Работа с пользователями

Текущий пользователь

За работу с текущим пользователем (клиентом) отвечает системный класс cmsUser. Этот класс доступен глобально и может использоваться в любом месте компонента – контроллере, хуках, модели, шаблонах.

Большинство свойств класса cmsUser доступны через статические методы. Но также есть возможность использовать экземпляр данного класса:

$user = cmsUser::getInstance();

Такой вариант предпочтительнее, если обращение к свойствам делается несколько раз в одном блоке кода. В примерах ниже показаны оба варианта обращения (статический и через экземпляр). В этих примерах предполагается что объект $user уже инициализирован как показано выше.

Проверка авторизации

if (cmsUser::isLogged()){ ...пользователь авторизован... }
if ($user->is_logged){ ...пользователь авторизован... }

Информация о пользователе

Если пользователь авторизован, то можно получить значение любого поля из таблицы users для этого пользователя. Например, ID или никнейм:

cmsUser::get('id');
cmsUser::get('nickname');
$user->id;
$user->nickname;

Для не авторизованного пользователя (гостя) доступно только поле id, которое содержит 0 (ноль). Перед запросом данных о пользователе всегда проверяйте, авторизован ли он.

Требование авторизации

Вы можете принудительно перенаправить пользователя на страницу авторизации при помощи метода goToLogin([$back_url]):

//если пользователь не авторизован
if (!cmsUser::isLogged()){
    //отправляем на страницу авторизации
    cmsUser::goToLogin();    
}

В качестве необязательного входящего параметра можно передать URL страницы, на которую пользователь должен быть перенаправлен после авторизации. Если не указано, произойдет возврат на текущий URL (с которого запрошена авторизация):

$back_url = href_to('my_controller', 'my_action');
cmsUser::goToLogin($back_url);

В этом примере после авторизации пользователь попадет на страницу /my_controller/my_action.

Проверка на администратора

if (cmsUser::isAdmin()){ ...это администратор... }
if ($user->is_admin){ ...это администратор... }

:!: В InstantCMS 2 признак администратора выставляется для каждого пользователя отдельно. Одна только принадлежность пользователя к группе «Администраторы» не делает его администратором!

Проверка членства в группе

Получение массива со списком id всех групп, в которых состоит пользователь:

$user->groups

Проверка членства в определенной группе:

if ($user->isInGroup($group_id)) { ... }

Проверка членства в любой из указанных групп:

if ($user->isInGroups($groups_ids_array)) { ... };

Проверка друзей

Получение массива со списком id всех друзей пользователя:

$user->friends

Проверка наличия друзей:

if ($user->hasFriends()) { ... }

Проверка наличия определенного друга:

if ($user->isFriend($friend_user_id)) { ... }

Сессия

Запись в сессию

Запись параметра $key со значением $value в сессию текущего пользователя:

cmsUser::sessionSet($key, $value);

Чтение из сессии

Проверка наличия параметра $key в сессии и его чтение:

//если параметр существует
if(cmsUser::isSessionSet($key)) {
    //извлекаем значение из сессии
    $value = cmsUser::sessionGet($key);
}

Если попытаться извлечь несуществующий параметр из сессии, то будет возвращено значение false.

Одновременно с чтением параметра из сессии можно его удалить:

//кладем параметр в сессию
cmsUser::sessionSet('my_key', 'my_value');
//читаем параметр и удаляем его
$value = cmsUser::sessionGet('my_key', true); //=> my_value
//проверяем что параметра больше нет
cmsUser::isSessionSet('my_key'); //=> false

Массивы в сессии

Если в сессию был записан массив, то можно читать и заменять отдельные его элементы по ключам:

//кладем в сессию массив
cmsUser::sessionSet('my_array', array('first'=>1, 'second'=>2));
//извлекаем только второй элемент массива
cmsUser::sessionGet('my_array:second');
//заменяем только первый элемент
cmsUser::sessionSet('my_array:first', 'Новое значение');

Удаление из сессии

cmsUser::sessionUnset($key);

Cookies

Запись в cookies

Установка кукиса $key со значением $value текущему пользователю:

cmsUser::setCookie($key, $value, $time, $path, $http_only)

последние 3 параметра не обязательны:

Параметр Значение По-умолчанию
$time Время жизни, в секундах 3600
$path Путь к директории на сервере, из которой будут доступен кукис /
$http_only Недоступность кукиса для Javascript и других клиентских языков true

Альтернатива:

cmsUser::setCookiePublic($key, $value, $time, $path)

Работает аналогично первому варианту, но $http_only установлен в false.

Чтение из cookies

Проверка наличия кукиса $key у пользователя и его чтение:

//если кукис существует
if(cmsUser::hasCookie($key)) {
    //извлекаем значение из кукиса
    $value = cmsUser::getCookie($key);
}

Если попытаться извлечь несуществующий кукис, то будет возвращено значение false.

Удаление cookies

cmsUser::unsetCookie($key);

Удаление производится сменой срока жизни кукиса на час в прошлое.


Вернуться к оглавлению

dev/controllers/user.txt · Последнее изменение: 26.11.2014 10:39 — admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki