Yii2 RBAC规则实施

C. *_*ris 9 php rule rbac yii2

大家好,我已经看过很多Yii 2 RBAC教程,但我真的不太欣赏如何实现规则.在Yii 2指南中,他们介绍了如何制定规则,但实际上并不是如何在控制器的行为或其他地方实现规则.关于这个问题我真的需要一些启示.

我现在拥有的是一个文件上传系统,我有两个角色,即admin和encoder.基本上,admin角色可以完成所有操作,而编码器角色只能创建,查看拥有,更新拥有和删除拥有.我已经创建了一个名为encodedBy的规则.

这是我在EncoderRule中的代码

namespace app\rbac; use yii\rbac\Rule;

/**  * Checks if encoded_by matches user passed via params  */ class EncoderRule extends Rule {
    public $name = 'encodedBy';

    /**
     * @param string|integer $user the user ID.
     * @param Item $item the role or permission that this rule is associated with
     * @param array $params parameters passed to ManagerInterface::checkAccess().
     * @return boolean a value indicating whether the rule permits the role or permission it is associated with.
     */
    public function execute($user, $item, $params)
    {
        return isset($params['document']) ? $params['document']->encoded_by == $user : false;
    } }
Run Code Online (Sandbox Code Playgroud)

我将数据存储在'document'表中,我有一个名为'encoded_by'的字段.我希望你们可以帮助我.非常感谢!!!

小智 3

如果我清楚地理解你,你想使用 Yii2 RBAC 规则来实现系统用户(管理员和编码器)的一些权限。嗯,这在某种程度上是非常简单的

Yii2 有用于此目的的现有表。这些表是 i。auth_assignment ii. 授权分配 auth_item iii. auth_item_child 四.授权规则

您需要做的第一件事是选择要使用 PhpManager 或 DBManager 的 authManager,但我建议您使用 DBManager 原因是,这就是我使用的

如果您使用的是 Yii2 Basic 模板,请在 web.php 的组件下添加以下代码行

'authManager' => [
                'class' => 'yii\rbac\DbManager',
                'defaultRoles' => ['guest'],
 ],
Run Code Online (Sandbox Code Playgroud)

如果是Yii2 Advanced 模板,请在 \common\config 文件夹内的 main.php 的组件下添加以下代码行

完成上述步骤后,

  • 从命令行运行 yii migrate --migrationPath=@yii/rbac/migrations

上面的代码将生成/创建之前在数据库中自动列出的四个表

创建您的 RBAC 规则。

这需要您创建权限和角色。

对于基本模板,

  • 在命令文件夹中创建一个文件并将其命名为 RbacController.php

请参阅http://pastebin.com/RAKpZX2J查看其外观

对于高级模板, - 创建相同的文件,但它将位于 console\controllers\RbacController.php 内

做完这一切之后,

  • 运行 yii rbac/init //这将在 RbacController 文件中运行 actionInit()

如果您成功创建了上述所有内容,您可以执行类似的操作来了解用户是否具有权限

if(Yii::$app->user->can('createUser')){

}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助..

  • 谢谢,但是规则怎么样?这是用于创建角色和权限,我已经有了。我的问题是如何在控制器中实施规则??? (4认同)