在命名权限方面,我应该遵循一些命名准则吗?现在,我找到的所有内容都类似于“添加 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
我在 Laravel 8 中很好地安装了 Laravel JetStream 和 Spatie 的 laravel-permission。
\n我可以在注册过程中为用户分配角色
\n$user->assignRole('visitor');\nreturn $user;\nRun Code Online (Sandbox Code Playgroud)\n并可以通过我在播种器 fil\xc3\xa9s run 方法中分配给角色的权限来限制用户仪表板上的可用菜单项:
\nPermission::create(['name' => 'access profile']);\nPermission::create(['name' => 'access logout']);\n\n$visitor = Role::create(['name' => 'visitor']);\n$visitor->givePermissionTo('access profile');\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n因此,我可以根据角色隐藏菜单项,但不幸的是,我仍然可以通过知道确切的 URL 直接访问该功能。
\n我想我必须编写一个中间件来限制对某些功能的访问,但具体怎么做呢?
\n在此堆栈中处理此问题的正确且可接受的方法是什么?
\n谢谢!\nArmand\n所以一切看起来都很好,但是(!)
\n如何禁止直接访问隐藏项目?我想在这种情况下,路由是由 sainttum 控制的,而角色和权限是由 Spatie 的包控制的。
\n是否可以将两者联系起来?
\n谢谢!
\nlaravel laravel-permission laravel-sanctum laravel-jetstream laravel-fortify
我使用 laravel spatie 包来获取用户权限。我需要列出不属于特定用户的所有用户。例如列出所有非管理员(角色)用户。
用于列出我使用的所有管理员用户
$users = App\User::role('admin');
Run Code Online (Sandbox Code Playgroud)
我需要与此相反的
删除用户的所有角色的最佳或常用方法是什么?
我试过
$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-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)
错误:
我在 laravel 项目中使用 spatie 包来管理角色和权限,我需要在表中列出所有角色及其权限,有什么办法吗?
[
{
id:1,
name:"role1",
"permissions":[
{
"id":1,
"name":"Permission 1"
},
{
"id":2,
"name":"Permission 2",
}
]
}
]
Run Code Online (Sandbox Code Playgroud) 我们如何一次为一个角色分配多个权限?
$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 如何包含多个权限?
请问有什么建议吗?
我正在使用此包https://github.com/spatie/laravel-permission来获取角色和权限。在我的应用程序中,我有几个角色,例如:
根据信任级别,我希望特定角色的每个人只能访问特定权限。user对于具有 id的角色的用户,7我希望他或她拥有editor“购物”权限,而没有其他权限。
65具有相同角色的 id 的另一个用户user可以拥有editor“购物” ,'edit profile、“查看地图”权限。
当我查看文档时https://docs.spatie.be/laravel-permission/v3/basic-usage/role-permissions/
是否可以为特定角色的用户授予与同一角色的其他用户不同的权限?
大家!我正在使用 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()已经是急切加载的查询了吗?
或者是否有任何急切加载的查询?
我试图弄清楚是否有一种简单的方法来获取拥有一个角色或另一个角色的所有用户。
在 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 角色表中,我有: