【问题标题】:How to update assignment in auth_assignment table in Yii2 Rbac?如何在 Yii2 Rbac 的 auth_assignment 表中更新分配?
【发布时间】:2016-09-28 09:58:18
【问题描述】:

我在我的 yii2 基本应用程序中使用 RBAC 来根据用户的角色为用户分配模块。

我将角色 id 和 user_id 存储在 auth_assignment 表中。

现在,如果我在更新期间更改用户角色。我还必须在 auth_assignment 表中更改它。现在我想从授权分配中删除该用户的所有条目并在表中添加新条目。

问题是我找不到任何 RBAC 函数来更新 auth_assignment 表数据或删除 auth 分配表数据。

Yii2 文档removeAllAssignments() 中有一个函数,但它会截断整个表,我只想删除特定用户的条目。

有没有可用的功能?

【问题讨论】:

    标签: php yii2 rbac yii2-basic-app yii2-rbac


    【解决方案1】:

    是的,有。

    assign() 为用户分配角色。
    revoke() 撤销用户的角色。
    revokeAll() 撤销用户的所有角色。

    要获取分配给用户的所有角色的列表,您可以使用getRolesByUser()

    【讨论】:

    • 感谢 Bizley revokeAll() 方法帮助了我。
    • 对了,这个我也补充一下,替别人解答。
    【解决方案2】:

    假设角色名称是从表单发送的,并且您将值存储在“角色”字段中,然后将其添加到您的模型中。

    这将删除现有的分配,并分配新的。

    public function afterSave($isInsert, $changedOldAttributes)
    {
    
        // Update the user role in the RBAC layer
        // Purge the user tokens when the password is changed
        if (array_key_exists('role', $changedOldAttributes)) {
    
            $auth = Yii::$app->authManager;
    
            $auth->revokeAll($this->id );
    
            $role = $auth->getRole($this->role);
    
            $auth->assign($role, $this->id);
        }
            return parent::afterSave($isInsert, $changedOldAttributes);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多