我遵循了本指南(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设置。这与以前的版本有所不同。
答案 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'
],