Я пытаюсь настроить RBAC, поэтому сделал несколько ролей для пользователей.
Теперь я пытаюсь понять, как сообщить контроллеру, какое действие должно быть доступно для какой роли.
В коде контроллеров я вижу это
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
Теперь я думал, что «пользователи» означают роли пользователей RBAC, но я думаю, что совершенно ошибаюсь. Итак, с одной стороны у меня есть это accessRules, а с другой стороны у меня есть несколько ролей RBAC. Как я могу указать контроллеру использовать мои роли?
Обновление для Джонни
Звучит интересно.... Я сделал тестовое действие
public function actionNew()
{
echo 'TEST'; die;
затем я сделал правило доступным для всех, просто для теста
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
array('allow',
'actions'=>array('new'),
'users'=>array('*'),
),
);
}
Но это не работает :( Любые идеи, почему?
Я получаю
Error 403
You are not authorized to perform this action.
ОБНОВЛЕНИЕ 2
OK тестовое действие работает с * пользователями.
Сейчас пытаюсь связать это со своими ролями и там застрял :(
array('allow',
'actions'=>array('new'),
'roles'=>array('role1'),
),
Не работает :(
на странице с кнопкой, которая вызывает это действие, у меня есть код проверки ролика
if(Yii::app()->user->checkAccess('role1')){
echo "hello, I'm role1";
}
Последнее обновление для Джонни Спасибо за помощь, наконец-то я это сделал. Я не знаю почему, но проблема заключалась в том, что я должен поместить все эти новые действия перед массивом отказа.
Нравится
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('allow',
'actions'=>array('new'),
'roles'=>array('role1'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
И в этом случае это работает. Раньше мое новое действие располагалось в коде после ошибки 'deny', вы можете проверить фрагменты кода в верхних обновлениях. Странно для меня, но теперь он работает нормально :)
*
пользователей. Удалите его и добавьте в эту строкуnew
'actions'=>array('index','view'),
Самый первый массив правил - person Jonnny   schedule 19.03.2014