RBAC и описание ролей в файле
Re: RBAC и описание ролей в файле
но в итоге при проверке я получаю false . есть проверяю админа на то что он модератор, хотя вот операции он верно находит, а роль не может понять, почему то
Re: RBAC и описание ролей в файле
Help please!
Вроде сделал всё как следует, не пойму что упустил:
main.php
Файлы PhpAuthManager и WebUser лежат абсолютно без изменений в папке components
В итоге при прописывании к моему модулю админки, одному из контроллеров правила accessRules для роли "admin" (в базе есть такой пользователь и такая текстовая роль - логинится нормально, не проходит именно по правилам accessRules):
Выдает ошибку:
Вроде сделал всё как следует, не пойму что упустил:
main.php
Код: Выделить всё
'components'=>array(
'user'=>array(
'class' => 'WebUser',
// enable cookie-based authentication
'allowAutoLogin'=>true,
),
...
'authManager'=>array(
'class'=>'PhpAuthManager',
'connectionID'=>'db',
),
В итоге при прописывании к моему модулю админки, одному из контроллеров правила accessRules для роли "admin" (в базе есть такой пользователь и такая текстовая роль - логинится нормально, не проходит именно по правилам accessRules):
Код: Выделить всё
array('allow',
'actions'=>array('admin','delete'),
'roles'=>array('admin'),
),
Что может быть?CException Не определено свойство "PhpAuthManager.connectionID".
Stack Trace
#0 Z:\home\localhost\www\Yii\framework\YiiBase.php(220): CComponent->__set("connectionID", "db")
#1 + Z:\home\localhost\www\Yii\framework\base\CModule.php(386): YiiBase::createComponent(array("class" => "PhpAuthManager", "connectionID" => "db"))
#2 + Z:\home\localhost\www\Yii\framework\web\CWebApplication.php(185): CModule->getComponent("authManager")
#3 + Z:\home\localhost\www\Yii\framework\web\auth\CWebUser.php(806): CWebApplication->getAuthManager()
#4 + Z:\home\localhost\www\Yii\framework\web\auth\CAccessControlFilter.php(338): CWebUser->checkAccess("admin")
Re: RBAC и описание ролей в файле
Простите, туплю - 2 часа смотрел на код что может быть не так, а оказалось что у меня в
еще осталась строка ConnectionID=db оставшаяся от экспериментов с CDbAuthManager )))
Код: Выделить всё
'authManager' => array(
// Будем использовать свой менеджер авторизации
'class' => 'PhpAuthManager',
// Роль по умолчанию. Все, кто не админы, модераторы и юзеры — гости.
'defaultRoles' => array('guest'),
),
Re: RBAC и описание ролей в файле
Без бизнес-правил всё работает отлично.
Понадобилось прикрутить правило, при котором только владелец может выполнять определенное действие:
auth.php:
во вьюхе:
Если у пользователя стоит роль 'manageOwnInfocentre' и это его элемент - все ок, срабатывает только в таком случае бизнес-правило.
Но я полагал, что пользователь с уровнем manageInfocentre (его родитель) сможет также пройти эту проверку так как полагал, что если у manageInfocentre 'bizRule' => null и это более высший уровень доступа - должен был бы пустить....
Думал, что смогу избавиться от конструкций, которые я сейчас использую:
Подскажите, пожалуйста, как реализовать бизнес-правила как следует в моем случае?
Понадобилось прикрутить правило, при котором только владелец может выполнять определенное действие:
auth.php:
Код: Выделить всё
'manageOwnInfocentre'=>array(
'type'=>CAuthItem::TYPE_ROLE,
'description'=>'Операції зі створення, редагування та видалення ВЛАСНИХ елементів Інфо-центру',
'bizRule' => 'return Yii::app()->user->id==$params["owner_id"];',
'data' => null
),
'manageInfocentre'=>array(
'type'=>CAuthItem::TYPE_ROLE,
'description'=>'Операції зі створення, редагування та видалення ВСІХ елементів Інфо-центру',
'children' => array(
'manageOwnInfocentre',
),
'bizRule' => null,
'data' => null
),
Код: Выделить всё
if (Yii::app()->user->checkAccess('manageOwnInfocentre',array('owner_id'=>$data['owner_id']))) ...
Но я полагал, что пользователь с уровнем manageInfocentre (его родитель) сможет также пройти эту проверку так как полагал, что если у manageInfocentre 'bizRule' => null и это более высший уровень доступа - должен был бы пустить....
Думал, что смогу избавиться от конструкций, которые я сейчас использую:
Код: Выделить всё
if (Yii::app()->user->checkAccess('manageInfocentre') || Yii::app()->user->checkAccess('manageOwnInfocentre',array('owner_id'=>$data['owner_id']))) ...
Re: RBAC и описание ролей в файле
Всем доброго время суток
Разбираюсь с правами доступа, уже сделал полный копипаст с рецепта, но ошибка остаётся та же
При обработке кода:
Выдаёт ошибку:
Неизвестный элемент авторизации "administrator".
Причём не важно что писать в checkAccess, элемент авторизации в ошибке меняется на роль пользователя, под которым зашёл.
Разбираюсь с правами доступа, уже сделал полный копипаст с рецепта, но ошибка остаётся та же
При обработке кода:
Код: Выделить всё
if (!Yii::app()->user->checkAccess('administrator')) {
echo "hello, I'm administrator";
}
Неизвестный элемент авторизации "administrator".
Причём не важно что писать в checkAccess, элемент авторизации в ошибке меняется на роль пользователя, под которым зашёл.
Re: RBAC и описание ролей в файле
Покажите свой auth.phpdrax08 писал(а):Всем доброго время суток
Разбираюсь с правами доступа, уже сделал полный копипаст с рецепта, но ошибка остаётся та же
При обработке кода:Выдаёт ошибку:Код: Выделить всё
if (!Yii::app()->user->checkAccess('administrator')) { echo "hello, I'm administrator"; }
Неизвестный элемент авторизации "administrator".
Причём не важно что писать в checkAccess, элемент авторизации в ошибке меняется на роль пользователя, под которым зашёл.
Re: RBAC и описание ролей в файле
Убедитесь что $this->authFile=Yii::getPathOfAlias('application.config.auth').'.php'; введет на существующий файл. может опечатка, или алиас не тот.
Если все ок, проверьте если в файле есть элемент массива с ключем нужной роли.
Если все ок, проверьте если в файле есть элемент массива с ключем нужной роли.
Re: RBAC и описание ролей в файле
Покажите свой auth.php
Код: Выделить всё
return array(
'guest' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'Guest',
'bizRule' => NULL,
'data' => NULL
),
'user' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'User',
'children' => array(
'guest', // унаследуемся от гостя
),
'bizRule' => NULL,
'data' => NULL
),
'moderator' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'Moderator',
'children' => array(
'user', // позволим модератору всё, что позволено пользователю
),
'bizRule' => NULL,
'data' => NULL
),
'administrator' => array(
'type' => CAuthItem::TYPE_ROLE,
'description' => 'Administrator',
'children' => array(
'moderator', // позволим админу всё, что позволено модератору
),
'bizRule' => NULL,
'data' => NULL
),
);
../protected/config/auth.phpУбедитесь что $this->authFile=Yii::getPathOfAlias('application.config.auth').'.php'; введет на существующий файл. может опечатка, или алиас не тот.
Код: Выделить всё
echo Yii::app()->user->role;
Re: RBAC и описание ролей в файле
Теперь конфиг и PhpAuthManagerdrax08 писал(а):Покажите свой auth.phpКод: Выделить всё
return array( 'guest' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => 'Guest', 'bizRule' => NULL, 'data' => NULL ), 'user' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => 'User', 'children' => array( 'guest', // унаследуемся от гостя ), 'bizRule' => NULL, 'data' => NULL ), 'moderator' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => 'Moderator', 'children' => array( 'user', // позволим модератору всё, что позволено пользователю ), 'bizRule' => NULL, 'data' => NULL ), 'administrator' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => 'Administrator', 'children' => array( 'moderator', // позволим админу всё, что позволено модератору ), 'bizRule' => NULL, 'data' => NULL ), );
../protected/config/auth.phpУбедитесь что $this->authFile=Yii::getPathOfAlias('application.config.auth').'.php'; введет на существующий файл. может опечатка, или алиас не тот.
на выходе administratorКод: Выделить всё
echo Yii::app()->user->role;
Re: RBAC и описание ролей в файле
Теперь конфиг и PhpAuthManager
Код: Выделить всё
'user' => array(
'class' => 'WebUser',
// enable cookie-based authentication
'allowAutoLogin' => true,
),
...
'authManager' => array(
'class' => 'PhpAuthManager',
'defaultRoles' => array('guest'),
),
Код: Выделить всё
class PhpAuthManager extends CPhpAuthManager
{
public function init()
{
// Иерархию ролей расположим в файле auth.php в директории config приложения
if ($this->authFile === NULL) {
$this->authFile = Yii::getPathOfAlias('application.config.auth') . '.php';
}
parent::init();
// Для гостей у нас и так роль по умолчанию guest.
if (!Yii::app()->user->isGuest) {
// Связываем роль, заданную в БД с идентификатором пользователя,
// возвращаемым UserIdentity.getId().
$this->assign(Yii::app()->user->role, Yii::app()->user->id);
}
}
}
Re: RBAC и описание ролей в файле
Дебажьте. Вроде всё норм.
Re: RBAC и описание ролей в файле
Извините, может немного глупый вопросДебажьте. Вроде всё норм.
Код: Выделить всё
public function assign($itemName,$userId,$bizRule=null,$data=null)
{
if(!isset($this->_items[$itemName]))
throw new CException(Yii::t('yii','Unknown authorization item "{name}".',array('{name}'=>$itemName)));
elseif(isset($this->_assignments[$userId][$itemName]))
throw new CException(Yii::t('yii','Authorization item "{item}" has already been assigned to user "{user}".',
array('{item}'=>$itemName,'{user}'=>$userId)));
else
return $this->_assignments[$userId][$itemName]=new CAuthAssignment($this,$itemName,$userId,$bizRule,$data);
}
Re: RBAC и описание ролей в файле
Не нормально. Причину - дебажьте.drax08 писал(а):Извините, может немного глупый вопросДебажьте. Вроде всё норм.Ошибка в этой функции, и нормально что массив $this->_items пустой? и если не нормально, то как он наполняется и в чём может быть причина?Код: Выделить всё
public function assign($itemName,$userId,$bizRule=null,$data=null) { if(!isset($this->_items[$itemName])) throw new CException(Yii::t('yii','Unknown authorization item "{name}".',array('{name}'=>$itemName))); elseif(isset($this->_assignments[$userId][$itemName])) throw new CException(Yii::t('yii','Authorization item "{item}" has already been assigned to user "{user}".', array('{item}'=>$itemName,'{user}'=>$userId))); else return $this->_assignments[$userId][$itemName]=new CAuthAssignment($this,$itemName,$userId,$bizRule,$data); }
Re: RBAC и описание ролей в файле
Спасибо всем за помощь)
Взял с GitHub файл CPhpAuthManager.php, заменил на тот что у меня был и всё заработало)
Взял с GitHub файл CPhpAuthManager.php, заменил на тот что у меня был и всё заработало)
Re: RBAC и описание ролей в файле
А как в accessRules() указать что может только модератор выполнять? или админ
Re: RBAC и описание ролей в файле
http://yiiframework.ru/doc/guide/ru/topics.authАнтон писал(а):А как в accessRules() указать что может только модератор выполнять? или админ
Re: RBAC и описание ролей в файле
Не конкретный пользователь, а группа.
Re: RBAC и описание ролей в файле
http://yiiframework.ru/doc/guide/ru/topics.authАнтон писал(а):Не конкретный пользователь, а группа.
Re: RBAC и описание ролей в файле
В "Приложение 1: модель User" этот код разве будет корректно работать?
При следующем обновлении уже существующего пользователя запишется хеш от хеша.
Код: Выделить всё
protected function beforeSave(){
$this->password = md5($this->password);
return parent::beforeSave();
}
Re: RBAC и описание ролей в файле
if(...) unset $passaleksp писал(а):В "Приложение 1: модель User" этот код разве будет корректно работать?
При следующем обновлении уже существующего пользователя запишется хеш от хеша.Код: Выделить всё
protected function beforeSave(){ $this->password = md5($this->password); return parent::beforeSave(); }