permissions - 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,但事实并非如此!我在这里遗漏了一些明显的东西吗?
顺便说一句:我刷新了权限,没有任何改变
解决方案
原来问题出在缓存中。我不知道为什么,但两者: php yii cache/flush rbacCache和 php yii cache/flush-all 根本没有清理缓存。我不得不手动删除缓存文件(在我的情况下是 /runtime/rbacCache/rb/)
推荐阅读
- python - NotFoundError:无法在 TensorFlow 中为大型数据集上的自定义损失函数找到有效的节点设备
- asp.net-core - 控制器依赖注入中的当前会话
- excel - 根据最早日期返回最晚日期
- performance - MPI_Send() 和 MPI_Isend() 后跟 MPI_Wait() 有什么区别?
- dart - Dart StringBuffers 列表似乎相互干扰
- javascript - 输入文本字段标签动画 | 香草 JavaScript
- java - JAVA:变量使用静态绑定还是动态绑定?
- javascript - 我的终端显示以下代码错误
- node.js - 您如何允许其他用户访问您的 Streamlabs API 应用程序?
- vue.js - 使用 fetch() 在布局中访问 Vue Nuxt 插件