【问题标题】:Yii2 - validate field from model in main.php fileYii2 - 验证 main.php 文件中模型的字段
【发布时间】:2016-08-09 03:07:24
【问题描述】:

我有一个名为 user 的表,其中有一个名为 estatuto 的字段。

只有拥有 estatuto == admin 的用户才能在我位于 main.php 文件中的 NavBar 小部件中看到管理员超链接。

我的问题是签到:

'label' => 'Admin', 'visible' => !Yii::$app->user->isGuest,

如果用户使用 estatuto == admin 登录,并且仅在这种情况下显示 admin 超链接。

我只能检查用户是否是访客。

我需要类似的东西:

'label' => 'Admin', 'visible' => !Yii::$app->user->isGuest && User::estatuto = 'admin',

我搜索了很多,我唯一看到但无法理解的是通过:

$this->view->params['customParam'] = 'customValue';

但也许还有另一种方法。

谁能帮我解决这个问题?

【问题讨论】:

    标签: php layout yii2


    【解决方案1】:

    您的任务不是验证模型字段,而是经典的权限管理任务。所以你应该使用Yii2 RBAC 功能。在这种情况下,您可以像这样检查权限:

    \Yii::$app->user->can('viewAdminMenu')
    

    【讨论】:

      【解决方案2】:

      当用户登录时,将 estatuto 的值存储在 session 中。

      然后在任何时候只需从会话中调用该值。

      也不要为访问设置可见标签。如果不是管理员,您不需要显示整个链接。 同样仅隐藏链接是不够的,您还需要检查控制器内的访问权限。

      更好的方法是使用基于角色的访问控制或 RBAC。

      【讨论】:

      • 但是......当用户登录时,NavBar 必须立即检查是否是管理员,以及如何将 User::estatuto 字段的值传递给 $SESSION?
      • 无论您在何处使用代码登录用户。当用户登录成功时,从数据库中获取该用户的“estatuto”值并存储在会话中。 yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html
      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多