如何在 Yii2 Advance App 中设置用户权限类型

How do I set user permission types in Yii2 Advance App

所以我有不同的用户角色,分别是国家管理员、地区管理员、市政管理员和外部用户。在我的用户 table 上,我有列字段 "role" 我希望外部用户无法在我生成的 CRUD 上创建内容。我该怎么做?

public function behaviors(){
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['POST'],
            ],
        ],
        'access' => [
            'class' => \yii\filters\AccessControl::className(),
            'only' => ['index','create','update','view'],
            'rules' => [
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // everything else is denied
            ],
        ],
    ];
}

你看过这个吗: https://www.yiiframework.com/doc/guide/2.0/en/security-authorization#rbac?

  1. 使用 yii\rbac\DbManager class 作为身份验证管理器组件
  2. 运行 迁移以创建安全表
  3. 定义您的低级别权限。
  4. 将它们添加到 behaviors\access
  5. 中的 roles
  6. 将他们分组为更高级别的权限和角色;分配给 用户
  7. 为您的自定义逻辑使用规则。
  8. 分配默认权限。

旁注:我建议为每个单独的 CRUD 函数(和其他操作)设置单独的权限。这样,您将永远不会发现自己处于单一权限授予过多访问权限的情况。

示例: 较低级别的权限:

  • createUser
  • updateUser
  • viewUser
  • deleteUser
  • activateUser
  • deactivateUser

将以上所有权限组合成一个allActionUser组,并将其分配给AdminRole角色。

viewUseractivateUserdeactivateUser组合成powerUser组,分配给powerUserRole角色。

然后为用户分配角色、组 and/or 个人细化权限。这将为您在分配权限和满足您的业务需求(或您的用例)方面提供最大的多功能性。

花额外的时间来理解规则并广泛使用它们来定义您的自定义逻辑。用控制器代码覆盖某些东西适用于一个功能,但您很快就会发现它的扩展性不好。

规则的一个很好的例子是updateUserSelf。您可能不想向最终用户分配 updateUser 权限,因为这将是一个 狂野西部 ,因为每个人都会更新每个人的信息。但是您当然希望让您的最终用户能够更新他们自己的信息。这就是规则派上用场的地方。