yii2admin override Вызов функции-члена getRoles () для null: authManager не читается из файлов конфигурации - PullRequest
0 голосов
/ 27 марта 2019

Ошибка : Вызов функции-члена getRoles () со значением NULL

взято из: yii2-admin \ models \ searchs \ AuthItem.php

в строке 75:

public function search($params)
{
    /* @var \yii\rbac\Manager $authManager */
    $authManager = Configs::authManager();
    if ($this->type == Item::TYPE_ROLE) {
here->  $items = $authManager->getRoles();
    } else {

Это из-за yii2-admin \ components \ configs.php:

в строке 148:

public static function instance()
{
    if (self::$_instance === null) {
        $type = ArrayHelper::getValue(Yii::$app->params, 'mdm.admin.configs', []);
        if (is_array($type) && !isset($type['class'])) {
            $type['class'] = static::className();
        }

        return self::$_instance = Yii::createObject($type);
    }

here->  return self::$_instance;
}

возвращает объект конфигурации, где 'authManager' равен нулю

Согласно: Yii2 RBAC Ошибка DbManager Вызов функции-члена getRole () со значением NULL

и

https://www.yiiframework.com/doc/guide/2.0/en/security-authorization#configuring-rbac-manager

Все, что необходимо для приложения yii2-advanced-app, это добавить следующее:

'authManager' => [
            'class' => 'common\components\extended\rbac\DbManager',           
            'cache' => 'cache',
        ],

в общий \ config \ main.php в массиве компонентов

Это уже было и, похоже, не влияет на конфиг из rbac. Кроме того, я попытался добавить authManager в конфигурационные файлы консоли, внешнего интерфейса и внутреннего интерфейса без эффекта.

Ожидаемый результат: 'authManager' => 'DbManager or something'

Фактический результат: 'authManager' => null

Файл конфигурации yii2 rbac корректно загружается в соединение db, но authManager всегда имеет значение null.

Эта проблема возникает при использовании расширения управления yii2admin rbac, но не при использовании yii2-advanced-app в целом, поскольку расширенное приложение использует \Yii::$app->authManager, а не yii2 rbac Configs::authManager

Любая помощь или указатели будут с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 27 марта 2019

(на основании комментария csminb)

Сбой кода в реализации dbManager функции yii \ rbac \ ManagerInterface.

Dbmanager, который расширен в нашей программе, уже расширен из BaseManager, который, в свою очередь, реализует ManagerInterface.

Поскольку DbManager и BaseManager расширены, они указали на расширенный ManagerInterface, который никогда не нуждался в расширении. : - (

Таким образом, исправление должно изменить BaseManager.php с:

abstract class BaseManager extends Component implements ManagerInterface

до:

abstract class BaseManager extends Component implements \yii\rbac\ManagerInterface

важно отметить, что эти расширенные файлы находятся в папке: пространство имен общее \ компоненты \ расширенное \ rbac;

Еще раз спасибо @csminb и stackoverflow за очень полезную информацию.

...