首页 > 解决方案 > YII2 权限和 CAN 功能问题

问题描述

我有一个具有以下功能的 YII2 高级模板应用程序:

public function isVisible()
    {
        if ($return = \Yii::$app->getUser()->can($this->getWidgetPermission())) {
            return true;
        } else {
            return false;
        }
    }

如果我添加以下代码来打印所有用户权限和所涉及的权限,则此功能不会以特定权限的预期方式运行:

public function isVisible()
    {
        if ($return = \Yii::$app->getUser()->can($this->getWidgetPermission())) {
            return true;
        } else {
            pr($this->getWidgetPermission() ,'NON ALLOWED!');
            pr(\Yii::$app->authManager->getPermissionsByUser(\Yii::$app->getUser()->getId()));
            return false;
        }
    }

我用第一个 pr() 得到权限的名称,用第二个 pr() 得到一个权限数组。奇怪的是:权限数组包括第一个。

例如:第一个 pr() 的输出:

backend\modules\m3p2\widgets\icons\WidgetIconProjects

第二个 pr() 的输出:

[
..,
[name] => backend\modules\m3p2\widgets\icons\WidgetIconProjects
..,
]

所以理论上:

\Yii::$app->getUser()->can($this->getWidgetPermission()

应该返回 TRUE,但事实并非如此!我在这里遗漏了一些明显的东西吗?

顺便说一句:我刷新了权限,没有任何改变

标签: permissionsyii2rolesyii2-advanced-apprbac

解决方案


原来问题出在缓存中。我不知道为什么,但两者: php yii cache/flush rbacCachephp yii cache/flush-all 根本没有清理缓存。我不得不手动删除缓存文件(在我的情况下是 /runtime/rbacCache/rb/)


推荐阅读