【问题标题】:Reinitializing rbac rights重新初始化 rbac 权限
【发布时间】:2020-01-14 03:58:08
【问题描述】:

我正在项目中实施 RBAC。 rbac/init 命令有代码

$auth = Yii::$app->getAuthManager();
$auth->removeAll();

此代码删除所有权利和分配。我想在 auth_assignment 表中保存对用户和权限。当 RBAC 重新初始化时,我尝试制定解决方案来保存 auth_assignment 表数据

$auth = Yii::$app->getAuthManager();
$data=Yii::$app->db->createCommand('select * from auth_assignment')->queryAll();
$auth->removeAll();
Yii::$app->db->createCommand()->batchInsert('auth_assignment',['item_name','user_id','created_at'],$data);

您对该解决方案有何看法?这样对吗?谢谢。

【问题讨论】:

  • 这行不通。 DbManager::removeAll 还删除所有角色、权限和规则,而不仅仅是分配。您将无法在 auth_assigment 表中插入任何内容,因为 item_name 不会存在于 auth_item 表中。在 removeAll 之后,您需要再次创建所有内容,而不仅仅是分配。
  • 为什么要删除所有auth_assignment 数据?您是第一次设置项目吗?如果 yes 你不需要这样做,如果 No ,那么 你不应该这样做。

标签: database authentication yii2 roles rbac


【解决方案1】:

我经历过这种情况,找到了两种处理分配权限的方法:

  1. 第一种方法是使用控制台:

    yii rbac/init

    这样你必须在控制台/命令中有控制器:

    use Yii;
    use yii\console\Controller;
    
    class RbacController extends Controller
    {
        public function actionInit()
        {
            $auth = Yii::$app->authManager;
            $auth->removeAll();
            //...
        }
    }
    
    1. 安装扩展yii2mod/yii2-rbac 并动态分配角色。这是link

我发现第二个选项更有效率和安全,因为你保留了已经分配的角色。希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2017-09-15
    • 1970-01-01
    • 2022-11-12
    • 2020-10-22
    • 2019-09-13
    • 2019-04-14
    • 2018-06-20
    • 1970-01-01
    相关资源
    最近更新 更多