【问题标题】:Yii 2 Menu Display List Depending on UserYii 2 菜单显示列表取决于用户
【发布时间】:2015-04-16 14:27:54
【问题描述】:

如何配置或自定义我的菜单,例如,如果我是 admin 用户,我可以在导航栏上看到所有内容,例如,在我的情况下,用户(我可以创建、更新或删除的用户列表)、商店(就像用户一样,我可以在此处配置特定商店)、交易,然后是 注销 按钮。但是当一个普通用户/员工登录时,他/她看到的唯一的东西就是Transactions菜单和一个Logout按钮。

请帮忙。

编辑: 这是我的菜单渲染代码:

<?php
    echo Menu::widget([
        'options' => ['id' => "nav-mobile", 'class' => 'right side-nav'],
        'items' => [
          ['label' => 'Home', 'url' => ['/site/index']],
          ['label' => 'About', 'url' => ['/site/about']],
          ['label' => 'Contact', 'url' => ['/site/contact']],
          Yii::$app->user->isGuest ?
              ['label' => 'Login', 'url' => ['/site/login']] :
              ['label' => 'Logout (' . Yii::$app->user->identity->username . ')',
                  'url' => ['/site/logout'],
                  'linkOptions' => ['data-method' => 'post']
              ],
      ],
    ]);
?>

【问题讨论】:

  • 在您的应用程序中如何确定用户角色?你实施了 RBAC 吗?或者例如存储在单独列中的用户表中的角色?
  • 嗨@arogachev,我没有使用RBAC。我使用了您提到的第二个,我将用户的 user_type 存储在用户表的特定列中。
  • 显示菜单渲染代码。

标签: php menu navbar yii2


【解决方案1】:

我觉得这个功能在这里也很有用

\Yii::$app->user->can("BackendUsersIndex")

'items' => [
    // Show users section for administrators only
    [
        'label' => 'Users',
        'url' => ['/users/index'],
        'visible' => \Yii::$app->user->can("BackendUsersIndex"),
    ],
],

【讨论】:

    【解决方案2】:

    items 数组中的每个项目都有visible 属性。传递表达式返回布尔值。

    'items' => [
        // Show users section for administrators only
        [
            'label' => 'Users',
            'url' => ['/users/index'],
            'visible' => !Yii::$app->user->isGuest && Yii::$app->user->identity->user_type == User::USER_TYPE_SUPER_ADMIN,
        ],
    ],
    

    Yoy 也可以将此条件放在附加模型方法中以避免重复,例如 isAdmin() 中的 User 模型。

    官方文档:

    【讨论】:

    • 我只是在我的代码中粘贴了'visible' =&gt; Yii::$app-&gt;user-&gt;identity-&gt;role == User::ROLE_ADMIN,,但出现了这个错误:Getting unknown property: app\models\User::role
    • 这只是一个例子,根据你的名字更正。
    • 我应该在USER_TYPE_ADMIN 常量中添加什么?
    • 你如何通过user_type确定管理员?
    • 我的user_type 可以是SuperAdminBizAdminBizStaff。我把它们放在我的数据库中的enum (phpmyadmin)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2019-09-05
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多