Печать

Объект JUser

Каждый запрос в любой CMS, в том числе и в Joomla совершает какой-либо пользователь. Информация о нем может быть доступна при использовании API CMS Joomla 1.5. Для получения этого объекта нужно использовать общую фабрику объектов:

$user =& JFactory::getUser();

В данном случае мы получаем ссылку на объект пользователя, запросившего генерацию страницы. Объект хранится в памяти все время выполнения запроса. Доступны следующие поля объекта JUser (полный список) (доступ осуществляется через оператор ->):

  • name — имя
  • email — адрес электронной почты
  • username — логин
  • usertype — тип пользователя (группа)
  • gid — идентификатор группы
  • guest — является ли данный пользователь гостем (1 — гость, 0 — зарегистрирован и вошел на сайт)

Все эти переменные это просто столбцы базы данных, которые есть у каждого пользователя. Но так же существуют некие переменные, которые храняется в настройках пользователя. Для получения таких параметров используется метод getParam данного объекта.

$user =& JFactory::getUser();
$language = $user->getParam('language', 'the default');
echo "<p>Ваш язык - {$language}.</p>";

 

Метод authorize

Данный метод используется для определения доступа конкретного пользователя к выполнению какой-либо задачи. Первый параметр — это компонент на который определяются права. Второй — сама задача (task). Например:

$user =& JFactory::getUser();
 
if ($user->authorize('com_content', 'edit', 'content', 'all')) {
 
    echo "<p>Вы можете редактировать все статьи.</p>";
} else {
    echo "<p>Вы не можете редактировать все статьи.</p>";
}
 
if ($user->authorize('com_content', 'publish', 'content', 'own')) {
    echo "<p>Вы можете публиковать свои статьи.</p>";
} else {
    echo "<p>Вы можете не публиковать свои статьи.</p>";
}

Но, разрешения встроенных функций не применимы к вашим собственным компонентами. Вы должны создать свои правила. Их можно добавить, например, в своем пользовательском плагине. Но помните, что права не наследуются (inherit) — если Administrator может что-то, то это не означате, что Super Administrator автоматически это тоже может. Правило надо добавить вручную.

$auth =& JFactory::getACL();
 
$auth->addACL('com_test', 'edit', 'users', 'super administrator');
$auth->addACL('com_test', 'edit', 'users', 'administrator');
$auth->addACL('com_test', 'edit', 'users', 'manager');
 
$user =& JFactory::getUser();
 
if ($user->authorize('com_test', 'edit')) {
    echo "<p>Вы можете редактировать что-то там.</p>";
} else {
    echo "<p>Вы ничего не можете.</p>";
}

 

Метод setParam

Данный метод используется для установки атрибута пользователя на текущую сессию. Первый параметр — это название атрибута, второй — его значение. Например:

$user =& JFactory::getUser();
$user->setParam("sample.name", 'Иван');
$user->setParam("sample.surname", 'Васильевич');
Дополнительно
  • Поскольку этот метод не записывает данные сразу в базу данных, значения будут действительны только до окончания сессии. Для сохранения параметров в СУБД следует воспользоваться методом $user->save()
  • По той же причине установка значений на время работы сессии работает и для неавторизованных пользователей.
  • В релизе 1.5.9 данные группируются в стандартном INI-формате с разбиением по символу '.'. Таким образом,
$user->setParam('contacts.icq', '-1')

будет сохранено в базе как

[contacts]
icq=-1

Однако следует осторожно относиться к этой возможности, поскольку значения более одного уровня вложенности не сохраняются. Например,

$user->setParam('company.department.name', 'Отдел продаж')

будет сохранён как

[company]

И значение 'company.department.name', засчёт корректного хранения вложенности классом JParameter, будет доступно только втечение текущей сессии, но при повторной авторизации пользователя этот параметр будет недоступен.

После этого, пока пользователь не вышел из системы, можно извлекать значения методом getParam. Поскольку не происходит сохранения значений в СУБД, то этот метод работоспособен в том числе и для гостей.

Интересная статья? Поделись ей с другими: