Авторизация¶
В платформе Oxwall авторизация реализована на основе ролей пользователей. Каждая роль в платформе разрешает или запрещает пользователям определенный набор действий.
Регистрация действий¶
Регистрация списка действий плагина производится в файле install.php (подробнее в разделе - Структура плагина). Ниже приведен пример регистрации нескольких действий:
install.php
<?php
$authorization = OW::getAuthorization();
$authorization->addGroup('superplugin');
$authorization->addAction('superplugin', 'view_items');
$authorization->addAction('superplugin', 'edit_items');
$authorization->addAction('superplugin', 'delete_items');
В приведенном примере при установке плагина мы создаем новую группу авторизации - superplugin (название группы авторизации должно совпадать с ключем плагина описанным в plugin.xml). Далее к созданной группе добавляем список действий которые в дальнейшем будем использовать к примеру для проверки прав пользователей просматривать, редактировать, удалять контент итд.
После регистрации списка действий нужно добавить для них описание для того, чтобы пользователи и администратор сайта смогли понять за, что отвечают эти действия. Для этого нам нужно подписаться на системное событие в файле - classes/event_handler.php (подробнее в разделе - Системные события) и вернуть описания этих действий:
classes/event_handler.php
<?php
class MYSUPERPLUGIN_CLASS_EventHandler
{
/**
* Class instance
*
* @var MYSUPERPLUGIN_CLASS_EventHandler
*/
private static $classInstance;
/**
* Class constructor
*/
private function __construct()
{}
/**
* Get instance
*
* @return MYSUPERPLUGIN_CLASS_EventHandler
*/
public static function getInstance()
{
if ( self::$classInstance === null )
{
self::$classInstance = new self();
}
return self::$classInstance;
}
/**
* Generic init (should be started for all contexts such as: mobile, desktop, cli and api)
*
* @return void
*/
public function genericInit()
{
$em = OW::getEventManager();
// init auth labels
$em->bind('admin.add_auth_labels', array($this, 'addAuthLabels'));
}
/**
* Add auth labels
*
* @param BASE_CLASS_EventCollector $event
* @return void
*/
public function addAuthLabels(BASE_CLASS_EventCollector $event)
{
$event->add(
array(
'superplugin' => array(
'label' => OW::getLanguage()->text('superplugin', 'auth_group_label'),
'actions' => array(
'view_items' => OW::getLanguage()->text('superplugin', 'auth_action_label_view_items'),
'edit_items' => OW::getLanguage()->text('superplugin', 'auth_action_label_edit_items'),
'delete_items' => OW::getLanguage()->text('superplugin', 'auth_action_label_delete_items')
)
)
)
);
}
}
В файле init.php который запускается при каждом запросе от клиента, запускаем метод который подписывается на системные события:
init.php
<?php
MYSUPERPLUGIN_CLASS_EventHandler::getInstance()->genericInit();
Проверка прав пользователей¶
Для того, чтобы проверить разрешено ли текущему пользователю выполнить те или иные действия нужно выполнить код:
<?php
// is view items allowed for current user ?
$isViewAllowed = OW::getUser()->isAuthorized('superplugin', 'view_items');
if ( !$isViewAllowed )
{
// get error message
$errorMessage = BOL_AuthorizationService::getInstance()->getActionStatus('superplugin', 'view_items');
throw new AuthorizationException($errorMessage['msg']);
}
Модераторы¶
Модераторы эта группа пользователей которых назначает администратор сайта в админ панели. Администратор сайта может разрешить управлять одним и более плагином, что в свою очередь значит, что модератору будут разрешены любые действия в плагине по управлению контентом пользователей.
Пример кода который проверяет является ли текущий пользователь модератором:
<?php
// is current user a moderator of the "superplugin" ?
$isModerator = OW::getUser()->isAuthorized('superplugin');
// is it an content owner or a moderator?
if ( $isContentOwner || $isModerator )
{
// do some logic
}