【问题标题】:Laravel and spatie/laravel-permissionLaravel 和 spatie/laravel-permission
【发布时间】:2018-10-10 09:12:16
【问题描述】:

从用户中删除所有角色的最佳或常用方法是什么?

我试过了

$roles = $user->getRoleNames(); $user->removeRole($roles);

Return value of App\User::getStoredRole() must implement interface Spatie\Permission\Contracts\Role, instance of Illuminate\Support\Collection returned

提前致谢

【问题讨论】:

    标签: laravel laravel-permission


    【解决方案1】:

    像这样使用普通的 Laravel detach 方法:

    $user->roles()->detach();

    【讨论】:

      【解决方案2】:

      我现在就是这样做$user->removeRole($user->roles->first());

      【讨论】:

        【解决方案3】:

        您还可以通过同步到一个空数组来删除所有角色,就像这样。

        $user->syncRoles([]);
        

        我确认它适用于 5.8 版。

        【讨论】:

          【解决方案4】:

          通过阅读文档,它清楚地表明您可以将 Collection 实例传递给 removeRole,所以我认为您做得对。

          assignRole、hasRole、hasAnyRole、hasAllRoles 和 removeRole 函数可以接受字符串、\Spatie\Permission\Models\Role 对象或 \Illuminate\Support\Collection 对象。

          【讨论】:

          • 我试过这个$roles = $user->getRoleNames(); $user->removeRole($roles);Return value of App\User::getStoredRole() must implement interface Spatie\Permission\Contracts\Role, instance of Illuminate\Support\Collection returned"
          • 我认为你将不得不迭代集合,我也会在他们的问题 github 页面上提出这个
          【解决方案5】:

          即使在 Laravel 7 上也能正常工作

          对于角色: $user->syncRoles([]);

          对于权限: $user->syncPermissions([]);

          【讨论】:

            【解决方案6】:

            从 Spatie 文档中,您可以找到一种删除所有先前角色并使用简单分配新角色的方法

            $user->syncRoles($roles);
            

            参考你可以访问这个link

            【讨论】:

              猜你喜欢
              • 2021-02-16
              • 2016-12-04
              • 1970-01-01
              • 1970-01-01
              • 2019-05-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-25
              相关资源
              最近更新 更多