Как получить разрешение пользователя из базы данных в Yii

Я очень новичок в Yii. Я разрабатываю реальный пример. У меня есть таблица, следовательно, модель, называемая пользователем, которая получает данные из базы данных. Три основных поля в базе данных: имя пользователя, пароль и роль пользователя. Логин и пароль работают нормально. Все, что мне нужно, это посмотреть на userRole в базе данных и на основе этого назначить роль пользователю. Например, поле userRole пользователя == 1, пользователь является администратором и может создавать, читать, обновлять и удалять (CRUD). Но если userRole пользователя == 2, пользователь может обновлять и создавать, но не удалять. Я пытался сделать это с помощью «выражения» ib accessRules() в UserController.php, но это не сработало. Потом я прочитал об этом и понял, что должен делать это с ролью. Вот что я написал:

public function accessRules()
    {
        $auth = Yii::app()->authManager;

        $auth->createOperation('createUser','create a user');
        $auth->createOperation('updateUser','update a user');
        $auth->createOperation('deleteUser','delete a user');

        $role=$auth->createRole('creator');
        $role->addChild('createUser');

        $role=$auth->createRole('updater');
        $role->addChild('updateUser');

        $role=$auth->createRole('deleter');
        $role->addChild('deleteUser');


        return array(
................................
        array('allow',
            'actions'=>array('create','update'),
            'users'=>array('@'),
            'roles'=>????,

.....................

??? где я понятия не имею, что делать. Я определяю createOperation/addChild в правильном месте/файле? Как я могу использовать «роли» в возвращаемом массиве? Также, где я должен получить роль пользователя из базы данных?

Я отчаянно ищу ответ, так как форум Yii не активен

Спасибо


person Community    schedule 09.02.2012    source источник


Ответы (2)


вы должны назначить роли зарегистрированному пользователю (или по известному идентификатору пользователя)

$auth->assign('creator',user()->id);
$auth->assign('updater', 102); //102 as user id
//...

А в accessRules надо написать

'actions'=>array('create','update'),
'roles'=>array('creator','updater'),

Этот ответ вы ищете?

person briiC    schedule 10.02.2012

Создание операций и ролей — одноразовое действие (всякий раз, когда вы их создаете или редактируете). Вам нужно иметь отдельный метод, который вы будете вызывать один раз.

И если вы хотите иметь систему доступа на основе ролей, вам необходимо добавить в базу данных дополнительные таблицы. Схему можно найти в папке - yii/framework/web/auth/schema.sql.

Но самый простой способ реализовать RBAC — это использовать расширение, такое как Rights — http://www.yiiframework.com/extension/rights/

person Mukesh Soni    schedule 10.02.2012