1

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

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

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

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

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

有没有可用的功能?

4

2 回答 2

1

就在这里。

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

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

于 2016-09-28T10:04:51.727 回答
0

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

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

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);
    }
于 2021-09-28T11:37:27.207 回答