Arm*_*sik 7 laravel laravel-permission laravel-sanctum laravel-jetstream laravel-fortify
我在 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谢谢!
\n小智 1
你尝试过这个吗?看来他们为 Spatie 添加了完全相同的内容。尽管如此,我认为你需要添加一个门权限检查,例如
abort_if(Gate::denies('permission'), Response::HTTP_FORBIDDEN, '403 Forbidden');
Run Code Online (Sandbox Code Playgroud)
在每一个行动上
| 归档时间: |
|
| 查看次数: |
3024 次 |
| 最近记录: |