0

错误在 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”为空

根据: 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 始终为空。

这是使用 yii2admin rbac 管理扩展时的问题,但在使用 yii2-advanced-app 作为高级应用程序使用\Yii::$app->authManager而不是 yii2 rbac时不会Configs::authManager

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

4

1 回答 1

0

(基于 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

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

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

于 2019-03-27T14:58:05.677 回答