标签: laravel-permission

Laravel spatie/laravel-permissions 命名约定

在命名权限方面,我应该遵循一些命名准则吗?现在,我找到的所有内容都类似于“添加 Foo”、“编辑 Foo”、“删除 Foo”、“添加 FooBar”、“编辑 FooBar”、“删除 FooBar”等等。

请记住,没有分组(这真是遗憾),并且当您有所有上述权限的管理屏幕时 - 上述方法似乎相当草率。

您所有的“添加”都在一起,“编辑”都在一起,等等,例如:

 - Add Foo
 - Add FooBar
 - Add FooBarBez
 - Edit Foo
 - Edit FooBar
 - Edit FooBarBez
 - Delete Foo
 - Delete FooBar
 - Delete FooBarBez
Run Code Online (Sandbox Code Playgroud)

现在我倾向于类似于路线名称的东西,例如:

 - foo.add
 - foo.edit
 - foo.delete
 - foobar.add
 - foobar.edit
 - foobar.delete
 - foobarbez.add
 - foobarbez.edit
 - foobarbez.delete
Run Code Online (Sandbox Code Playgroud)

它在将所有“父”权限保持在一起方面更有组织性(即:所有 Foo 在一起,所有 FooBar 在一起,等等)。当然,如果有实际的指导方针,请告诉我,或者您有其他有价值的意见/建议吗?

//为了清晰起见编辑更新

具体来说,

- __Are__ any naming conventions? 
- Are there any preferences in terms of use of singular/plural …
Run Code Online (Sandbox Code Playgroud)

naming-conventions user-permissions laravel laravel-5 laravel-permission

7
推荐指数
2
解决办法
2861
查看次数

如何将 Spatie 的 laravel-permission 与 JetStream 正确集成?

我在 Laravel 8 中很好地安装了 Laravel JetStream 和 Spatie 的 laravel-permission。

\n

我可以在注册过程中为用户分配角色

\n
$user->assignRole('visitor');\nreturn $user;\n
Run Code Online (Sandbox Code Playgroud)\n

并可以通过我在播种器 fil\xc3\xa9s run 方法中分配给角色的权限来限制用户仪表板上的可用菜单项:

\n
Permission::create(['name' => 'access profile']);\nPermission::create(['name' => 'access logout']);\n\n$visitor = Role::create(['name' => 'visitor']);\n$visitor->givePermissionTo('access profile');\n
Run Code Online (Sandbox Code Playgroud)\n

并通过视图中的 can 指令,例如:

\n
@can('access profile')\n<!-- Account Management -->\n<div class="block px-4 py-2 text-xs text-gray-400">\n    {{ __('Manage Account') }}\n</div>\n\n<x-jet-dropdown-link href="{{ route('profile.show') }}">\n    {{ __('Profile') }}\n</x-jet-dropdown-link>\n@endcan\n
Run Code Online (Sandbox Code Playgroud)\n

因此,我可以根据角色隐藏菜单项,但不幸的是,我仍然可以通过知道确切的 URL 直接访问该功能。

\n

我想我必须编写一个中间件来限制对某些功能的访问,但具体怎么做呢?

\n

在此堆栈中处理此问题的正确且可接受的方法是什么?

\n

谢谢!\nArmand\n所以一切看起来都很好,但是(!)

\n

如何禁止直接访问隐藏项目?我想在这种情况下,路由是由 sainttum 控制的,而角色和权限是由 Spatie 的包控制的。

\n

是否可以将两者联系起来?

\n

谢谢!

\n

laravel laravel-permission laravel-sanctum laravel-jetstream laravel-fortify

7
推荐指数
1
解决办法
3024
查看次数

列出不属于某个角色的用户

我使用 laravel spatie 包来获取用户权限。我需要列出不属于特定用户的所有用户。例如列出所有非管理员(角色)用户。

用于列出我使用的所有管理员用户

$users = App\User::role('admin');
Run Code Online (Sandbox Code Playgroud)

我需要与此相反的

laravel laravel-5 laravel-permission

5
推荐指数
1
解决办法
4557
查看次数

如何在 spatie/laravel-permission 中删除用户的所有角色

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

我试过

$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
Run Code Online (Sandbox Code Playgroud)

laravel laravel-permission

4
推荐指数
1
解决办法
2万
查看次数

BadMethodCallException 调用未定义的方法 App\Models\User::hasAnyRole()

我正在使用 Laravel-Permissions 并在 rotes\web.php 中写入:

Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/admin', function () {
        return "Test";
    });
});
Run Code Online (Sandbox Code Playgroud)

我在 app\Http\Kernel.php 中添加:

protected $routeMiddleware = [
    // ...
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];
Run Code Online (Sandbox Code Playgroud)

错误:

在此输入图像描述

php laravel laravel-permission laravel-ui

4
推荐指数
1
解决办法
1万
查看次数

如何列出 spatie 权限包中具有权限的所有角色?

我在 laravel 项目中使用 spatie 包来管理角色和权限,我需要在表中列出所有角色及其权限,有什么办法吗?

[  
   {  
      id:1,
      name:"role1",
      "permissions":[  
         {  
            "id":1,
            "name":"Permission 1"
         },
         {  
            "id":2,
            "name":"Permission 2",
         }
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

php model laravel laravel-permission

3
推荐指数
1
解决办法
1万
查看次数

为角色授予多个权限 - Spatie

我们如何一次为一个角色分配多个权限?

    $permission1 = Permission::create(['name' => 'Create Client']);
    $permission2 = Permission::create(['name' => 'View Invoice']);
    $permission3 = Permission::create(['name' => 'Add Product']);

    $role = Role::findById(1);

    $role->givePermissionTo($permission1);
Run Code Online (Sandbox Code Playgroud)

在上面,我只授予第一个权限。

由于这也是通过实现的, $role->syncPermissions($permissions); 我很困惑 $permission 如何包含多个权限?

请问有什么建议吗?

laravel laravel-permission

2
推荐指数
1
解决办法
1万
查看次数

添加和撤销具有特定角色的特定用户的权限

我正在使用此包https://github.com/spatie/laravel-permission来获取角色和权限。在我的应用程序中,我有几个角色,例如:

  1. 用户
  2. 雇主
  3. 店主
  4. 供应商

根据信任级别,我希望特定角色的每个人只能访问特定权限。user对于具有 id的角色的用户,7我希望他或她拥有editor“购物”权限,而没有其他权限。

65具有相同角色的 id 的另一个用户user可以拥有editor“购物” ,'edit profile、“查看地图”权限。

当我查看文档时https://docs.spatie.be/laravel-permission/v3/basic-usage/role-permissions/

是否可以为特定角色的用户授予与同一角色的其他用户不同的权限?

laravel laravel-permission

2
推荐指数
1
解决办法
5788
查看次数

Laravel Spatie 通过 Eager Loading 获得所有权限

大家!我正在使用 Laravel Spatie 权限包。我可以像这样获得用户的所有分配权限。

$user->getAllPermissions()
Run Code Online (Sandbox Code Playgroud)

但是,我想通过急切加载获得所有权限。也许像这样。

$users = User::with('getAllPermissions')->get();
Run Code Online (Sandbox Code Playgroud)

但这没有用。

我试过

$users = user::with('permissions')->get();
Run Code Online (Sandbox Code Playgroud)

但查询计数与结果相同

$users = user::get();
Run Code Online (Sandbox Code Playgroud)

那么$user->getAllPermissions()已经是急切加载的查询了吗?

或者是否有任何急切加载的查询?

permissions laravel laravel-5 spatie laravel-permission

2
推荐指数
1
解决办法
3485
查看次数

Spatie Laravel 权限 - 如何获取具有一个角色或另一个角色的用户

我试图弄清楚是否有一种简单的方法来获取拥有一个角色或另一个角色的所有用户。
在 Spatie Laravel Permissions 的官方文档上,我找不到这个。

我正在尝试这样做,但我得到了所有用户。

User::role(['Individual', 'Organisation', 'Venue'])->get();
Run Code Online (Sandbox Code Playgroud)

我也在尝试这样的:

User::whereHas("roles", function($q) {
                $q->orWhere(function ($query) {
                    $query->where("name", "Individual")
                        ->where("name", "Venue")
                        ->where("name", "Organisation");
                });
            })->get();
Run Code Online (Sandbox Code Playgroud)

在 Db 角色表中,我有:

在此输入图像描述

laravel laravel-permission

2
推荐指数
1
解决办法
1万
查看次数