php - Yii2 RBAC 不工作 - 允许访问所有内容
问题描述
我遇到了一个问题,我在 Yii 2.0 中配置了 RBAC,但它不起作用——这意味着它不会阻止任何页面被加载——即使作为访客也是如此。
这是在我的 web.php 配置中(也在我的 console.php 中):
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
迁移已成功完成。
这是目前behaviors()
的样子,但我尝试了很多不同的方法。
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['error'],
'allow' => true,
//'roles' => ["?"],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
如果我behaviors()
在我的控制器中实现该功能,框架开始进行一些访问处理,但据我所知,使用数据库的目标应该是 RBAC 系统接管这个责任——这意味着我不必启用/禁用每个我为每个角色编写的单个动作。
我添加了一个角色“管理员”并为其分配了一些可用的路由(操作)。然后我将此角色分配给我的用户名。从理论上讲,这应该使我的登录名可以访问那些特定的路线,但不能访问其他任何东西-相反,我可以随心所欲地遍历该站点,而无需任何 403。(这就是为什么我说 RBAC 的行为就像它不存在一样。)
任何提示或提示表示赞赏。
谢谢。
解决方案
您的 authManager 配置在哪里?
根据[yii2指南]
如果您使用的是 yii2-basic-app 模板,则有一个 config/console.php 配置文件,其中需要在 config/web.php 中另外声明 authManager。在 yii2-advanced-app 的情况下,authManager 应该只在 common/config/main.php 中声明一次。
更新到这个问题,我只是尝试手动执行 rbac
我的结果我们必须在每一个动作中做有条件的,比如
...
public function actionAbout()
{
if (Yii::$app->user->can('ViewAbout')) {
echo "you may see view about";
} else {
echo "view about is prohibited";
}
// return $this->render('about');
}
...
如果你想以通用方式分配它,你最好使用处理 authmanager 的扩展/模块(如 yii2-admin、yii2-mimin 等)
希望这个答案有帮助
推荐阅读
- android - 为什么我不能在 Android Studio 中关闭我的 RadioGroup 标签?
- java - 将 URL 作为输入正文参数传递时的 API 安全检查
- bash - 使变量存在于 shell 脚本之外
- r - R - 剪切函数重复值
- google-cloud-platform - 激活谷歌云网卡
- oracle - 如何获取包含我给 oracle 的数据的表列表?
- javascript - Javascript方法将每个单词的第一个字母以及连字符或破折号后的每个单词都大写
- javascript - Cheeriojs 遍历 xml 响应
- html - 任何适用的指令或 div 元素均未提供属性 ngClass
- kubernetes - 如何获取旧的 pod 名称并将其映射到 Kubernetes 中的当前名称