Как получить разрешение пользователя из базы данных в Yii - PullRequest
0 голосов
/ 10 февраля 2012

Я очень, очень плохо знаком с Yii.Я разрабатываю пример из реального мира.У меня есть таблица, отсюда и модель, которая называется user, которая получает данные из базы данных.Три основных поля в базе данных: имя пользователя, пароль и userRole.Имя пользователя и пароль работают просто отлично.Все, что мне нужно, чтобы посмотреть на userRole в базе данных и, исходя из этого, назначить роль пользователю.Например, поле userRole пользователя == 1, пользователь является администратором и может создавать, читать, обновлять и удалять (CRUD).Но если userRole пользователя == 2, пользователь может обновить и создать, но не удалить.Я пытался сделать это с помощью 'expression' 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 в нужном месте / файле?Как я могу использовать «роли» в возвращаемом массиве?Также, где мне взять userRole из базы данных?

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

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

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

И в accessRules вы должны написать

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

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

0 голосов
/ 10 февраля 2012

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

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

Но самым простым способом реализации RBAC было бы использование расширения вроде Rights - http://www.yiiframework.com/extension/rights/

...