Содержание
Работа с пользователями
Текущий пользователь
За работу с текущим пользователем (клиентом) отвечает системный класс 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);
Удаление производится сменой срока жизни кукиса на час в прошлое.