Помогите победить Rbac в Yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Помогите победить Rbac в Yii2

Сообщение Akulenok »

Добрый день, никак не могу победить RBAC в yii2, ибо нет понятной русской инструкции как это сделать.

Делаю по этому ману https://github.com/yiisoft/yii2/blob/ma ... ization.md
Буду очень благодарен если кто-нибудь поможет понять все до конца.
Цель сделать три роли user, moder и admin
И так...
Добавляю в конфиг

Код: Выделить всё

'authManager' => [
            'class' => 'yii\rbac\PhpManager',
            'defaultRoles' => ['user', 'moder', 'admin'],
        ], 

Создаю папку rbac в корне приложения. Внутри папки создаю файл items.php,


затем в папке commands создаю контроллер

Код: Выделить всё

<?php
namespace app\commands;

use Yii;
use yii\console\Controller;

class RbacController extends Controller
{
    public function actionInit()
    {
        $auth = Yii::$app->authManager;

        // user
        $user = $auth->createPermission('user');
        $user->description = 'its user';
        $auth->add($user);

        // moder
        $moder = $auth->createPermission('moder');
        $moder->description = 'its moder';
        $auth->add($moder);

        // admin
        $admin = $auth->createPermission('admin');
        $admin->description = 'its admin';
        $auth->add($admin);

        // Assign roles to users. 1 and 2 are IDs returned by IdentityInterface::getId()
        // usually implemented in your User model.
        $auth->assign($user, 1);
        $auth->assign($moder, 2);
        $auth->assign($admin, 3);
    }
} 
я не понимаю как его создавать, делаю по примеру из мана, возможно тут ошибки

запускаю в консоле команду
php yii rbac/init

и получаю ошибку
PHP Fatal Error 'yii\base\ErrorException' with message 'Call to a member function createPermission() on a non-object'

in D:\server\site.ru\www\commands\RbacController.php:14

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleFatalError()
#1 {main}
PHP Fatal error: Call to a member function createPermission() on a non-object in

финиш, надеюсь кто-нибудь поможет разобраться
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Помогите победить Rbac в Yii2

Сообщение Faenir »

Компонент authManager в конфиге для консоли прописан?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

теперь прописал, ошибок стало еще больше )
PHP Warning 'yii\base\ErrorException' with message 'Invalid argument supplied for foreach()'

in D:\server\site.ru\www\vendor\yiisoft\yii2\rbac\PhpManager.php:624

Stack trace:
#0 D:\server\site.ru\www\vendor\yiisoft\yii2\rbac\PhpManager.php(624): yii\base\ErrorHandler->handleError(2, 'Invalid argumen...', 'D:\\server\\sites...', 624, Array)
#1 D:\server\site.ru\www\vendor\yiisoft\yii2\rbac\PhpManager.php(88): yii\rbac\PhpManager->load()
и тд.

ругается на эту строку

Код: Выделить всё

 foreach ($items as $name => $item) {
            $class = $item['type'] == Item::TYPE_PERMISSION ? Permission::className() : Role::className();
и даже если дефолтный RbacController из статьи, такие же ошибки
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: Помогите победить Rbac в Yii2

Сообщение Insolita »

а в файлах items.php rules.php у вас что? вы файлы то с ролями создали?
Чтобы присваивать роли так как вы пытаетесь у вас должен быть файлик типа items.php примерно такого содеражания

Код: Выделить всё

<?php
return [
    'admin' => [
        'type' => 1,
        'description' => 'Администратор',
        'children' => [
            'manager',
            'guest',
        ],
    ],
    'manager' => [
        'type' => 1,
        'description' => 'Менеджер',
        'children' => [
            'guest',
        ],
    ],
    'guest' => [
        'type' => 1,
        'description' => 'Гость',
    ],
];
 
По умолчанию он должен быть расположен в '@app/rbac/items.php' - можно в настройках компонента authManager свой путь прописать, так же еще файлы для правил и связей должны быть созданы.

Роли которые вы перечислили по умолчанию так не присваиваются, они для правил http://stuff.cebe.cc/yii2docs/guide-sec ... ault-roles
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

вот уже яснее, а что надо в rules.php писать?
сейчас ругается на

Код: Выделить всё

 foreach ($rules as $name => $ruleData) {
            $this->rules[$name] = unserialize($ruleData);
        }
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Помогите победить Rbac в Yii2

Сообщение Faenir »

Вот тут все есть, изучайте)
https://github.com/vova07/yii2-rbac-mod ... /items.php
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

в целом этот модуль у меня работает, но есть вопросы
https://github.com/vova07/yii2-rbac-mod ... /rules.php
что значит эта строка

Код: Выделить всё

<?php
return [
    'group' => 'O:27:"vova07\\rbac\\rules\\GroupRule":3:{s:4:"name";s:5:"group";s:9:"createdAt";N;s:9:"updatedAt";N;}',
];
и каким макаром она создается, автоматически или вова07 ее ручками создал?
ភាសាខ្មែរ Yii2 - это кайф!
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: Помогите победить Rbac в Yii2

Сообщение belkod »

Ну это статическая строка, ведущая на https://github.com/vova07/yii2-rbac-mod ... upRule.php
Собственно данный модуль я тоже использую. Сделал свои роли, свои группы и вполне все работает.
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

ну я просто хочу понять что значит эта строка
'group' => 'O:27:"vova07\\rbac\\rules\\GroupRule":3:{s:4:"name";s:5:"group";s:9:"createdAt";N;s:9:"updatedAt";N;}',

что значит 0:27 ? createdAt updatedAt ?
ភាសាខ្មែរ Yii2 - это кайф!
fenixter
Сообщения: 20
Зарегистрирован: 2014.07.16, 16:44

Re: Помогите победить Rbac в Yii2

Сообщение fenixter »

Akulenok писал(а):ну я просто хочу понять что значит эта строка
'group' => 'O:27:"vova07\\rbac\\rules\\GroupRule":3:{s:4:"name";s:5:"group";s:9:"createdAt";N;s:9:"updatedAt";N;}',

что значит 0:27 ? createdAt updatedAt ?

Код: Выделить всё

var_dump(unserialize('O:27:"vova07\\rbac\\rules\\GroupRule":3:{s:4:"name";s:5:"group";s:9:"createdAt";N;s:9:"updatedAt";N;}'));

Код: Выделить всё

object(__PHP_Incomplete_Class)#1 (4) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(27) "vova07\rbac\rules\GroupRule"
  ["name"]=>
  string(5) "group"
  ["createdAt"]=>
  NULL
  ["updatedAt"]=>
  NULL
}
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

А как теперь в контроллере указать разрешения например для админа
делаю

Код: Выделить всё

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['*'],
                        'allow' => true,
                        'roles' => [User::ROLE_ADMIN],
                    ],
                ],
            ],
         
 
Forbidden (#403)
Вам не разрешено производить данное действие.

'roles' => ['admin'], тоже не пашет

<?= \Yii::$app->user->can('admin');?> выводит 1, то есть работает Rbac
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

хм. а 'actions' => ['index'], работает, а как все действия тогда указать?
ភាសាខ្មែរ Yii2 - это кайф!
fenixter
Сообщения: 20
Зарегистрирован: 2014.07.16, 16:44

Re: Помогите победить Rbac в Yii2

Сообщение fenixter »

Не указывать 'actions'.

У меня вот так работает (вроде :D ):

Код: Выделить всё

return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => Yii::$app->getModule('users')->adminRoles
                    ]
                ]
            ]
        ];
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

fenixter, а ты не пробовал перенести файлы в другое место, я переношу в app/modules/rbac
везде меняю неймспейсы, конфиг ошибок нет, но и права не работают
ភាសាខ្មែរ Yii2 - это кайф!
fenixter
Сообщения: 20
Зарегистрирован: 2014.07.16, 16:44

Re: Помогите победить Rbac в Yii2

Сообщение fenixter »

Akulenok писал(а):fenixter, а ты не пробовал перенести файлы в другое место, я переношу в app/modules/rbac
везде меняю неймспейсы, конфиг ошибок нет, но и права не работают
Ну у меня и rbac и users как модули.. Я взял код от vova07 и переделал под свои нужды
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

Вообщем весь мой гемор был из-за того что я не указывал в конфиге @
т.е я прописывал 'itemFile' =>
'app/modules/rbac/data/items.php',

а надо было
'itemFile' =>
'@app/modules/rbac/data/items.php',
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
SpiritAbsolute
Сообщения: 187
Зарегистрирован: 2013.12.29, 18:20
Откуда: Калининград
Контактная информация:

Re: Помогите победить Rbac в Yii2

Сообщение SpiritAbsolute »

ох как же этот rbac достал то... ну нифига же не понятно... ну нифига же не расписано как нужно сделать. следую инструкции по установке модуля вовы... Скачал модуль компосером. Вбил конфиг c нужным путем.

Код: Выделить всё

       'authManager' => [
            'class' => 'yii\rbac\PhpManager',
            'defaultRoles' => [
                'user',
                'admin',
                'superadmin'
            ],
            'itemFile' => '@common/modules/rbac/data/items.php',
            'assignmentFile' => '@common/modules/rbac/data/assignments.php',
            'ruleFile' => '@common/modules/rbac/data/rules.php',
        ],
В папке common/modules создал папку rbac, кинул туда содержимое модуля вовы.
И что дальше? это все? вся инструкция по установке? Нифига эта строчка не работает -

Код: Выделить всё

Yii::$app->user->can('admin');
Как нужно прописать эти роли в таблицу users?
У меня в классе users прописаны свои роли вот так:

Код: Выделить всё

const ROLE_USER = 1;
    const ROLE_CLIENT = 2;
    const ROLE_ADMIN = 3;
    
    public static $rolesList = [
        self::ROLE_USER     => 'Пользователь',
        self::ROLE_CLIENT   => 'Клиент',
        self::ROLE_ADMIN    => 'Администратор', 
    ];
Как мне передалть эти роли так, чтобы модуль заработал. И нужно ли вообще запускать на исполнение что то из консоли?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Помогите победить Rbac в Yii2

Сообщение Akulenok »

У вовы на файлах, без таблицы юзер
в модели юзеров ничего не надо,
все роли в файлах
из консоли ничего не надо
ភាសាខ្មែរ Yii2 - это кайф!
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите победить Rbac в Yii2

Сообщение lynicidn »

Akulenok писал(а):У вовы на файлах, без таблицы юзер
в модели юзеров ничего не надо,
все роли в файлах
из консоли ничего не надо
стихи прям :D
Аватара пользователя
SpiritAbsolute
Сообщения: 187
Зарегистрирован: 2013.12.29, 18:20
Откуда: Калининград
Контактная информация:

Re: Помогите победить Rbac в Yii2

Сообщение SpiritAbsolute »

так как мне роли то назначить ? мне нужно ограничить доступ в админку для всех кроме суперадмина.
до этого у меня админка была на другом домене, теперь стала на том же что и фронтенд, и старые правила доступа перестали работать как надо. Любой авторизованый смог заходить в админку. Как мне с помощью модуля вовы, писать права доступа в public function behaviors() ?

Код: Выделить всё

[
'allow'   => true,
'roles'   => ['speradmin'],
],
 
Как старым пользователям переназначить роли?
Ответить