yii2admin override在null上调用成员函数getRoles():不从配置文件中读取authManager

问题描述 投票:0回答:1

错误:在null上调用成员函数getRoles()

来自: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'为null

根据:Yii2 RBAC DbManager error Call to a member function getRole() on 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',
        ],

组件数组下的common \ 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

任何帮助或指针将不胜感激。谢谢。

php yii2 yii2-advanced-app rbac yii2-rbac
1个回答
0
投票

(根据csminb的评论)

代码在DbManager的yii \ rbac \ ManagerInterface实现上失败了。

在我们的程序中扩展的Dbmanager已经从BaseManager扩展,而BaseManager又实现了ManagerInterface。

由于DbManager和BaseManager被扩展,它们指向扩展的ManagerInterface,它从不需要首先扩展。 :-(

所以解决方法是从以下位置更改BaseManager.php:

abstract class BaseManager extends Component implements ManagerInterface

至:

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

值得注意的是,这些扩展文件位于以下文件夹中:namespace common \ components \ extended \ rbac;

再次感谢@csminb和stackoverflow非常有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.