在RBAC DbManager Yii2上找不到错误规则

时间:2015-03-10 09:53:57

标签: yii2 rbac

我遵循了本指南(http://www.yiiframework.com/doc-2.0/guide-security-authorization.html),但仍然出错。

我创建了auth_item,auth_item_chid,auth_assignment和auth_rule表

当我将此行添加到我的控制器

if (\Yii::$app->user->can('createPost')) {   //mycode ... }

我收到错误 - >未找到规则:作者

protected function executeRule($user, $item, $params)
{
    if ($item->ruleName === null) {
        return true;
    }
    $rule = $this->getRule($item->ruleName);
    if ($rule instanceof Rule) {
        return $rule->execute($user, $item, $params);
    } else {
        throw new InvalidConfigException("Rule not found: {$item->ruleName}");
    }
}

我已在auth_item表中为用户分配了一个角色,auth_item已经有auth_item_chid。 在Yii2上,所有auth_item都应该使用rule_name设置。这与以前的版本有所不同。

1 个答案:

答案 0 :(得分:1)

您可以扩展DbManager以修复错误

<?php
namespace app\components;

use yii\base\InvalidConfigException;
use yii\rbac\Rule;

class DbManager extends \yii\rbac\DbManager
{
    protected function executeRule($user, $item, $params)
    {
        if (empty($item->ruleName)) {
            return true;
        }

         return parent::executeRule($user, $item, $params);
    }
}

并改变config / web.php,如

    'authManager' => [
        'class' => 'app\components\DbManager'
    ],