【发布时间】:2021-09-25 22:44:36
【问题描述】:
我在 Laravel 8 中有一个运行良好的 Laravel JetStream 基本安装和 Spatie 的 laravel-permission。
我可以在注册过程中为用户分配角色
$user->assignRole('visitor');
return $user;
并且可以通过我在种子文件运行方法中分配给角色的权限来限制用户仪表板上的可用菜单项:
Permission::create(['name' => 'access profile']);
Permission::create(['name' => 'access logout']);
$visitor = Role::create(['name' => 'visitor']);
$visitor->givePermissionTo('access profile');
并通过视图中的can指令,如:
@can('access profile')
<!-- Account Management -->
<div class="block px-4 py-2 text-xs text-gray-400">
{{ __('Manage Account') }}
</div>
<x-jet-dropdown-link href="{{ route('profile.show') }}">
{{ __('Profile') }}
</x-jet-dropdown-link>
@endcan
因此,我可以根据角色隐藏菜单项,但不幸的是,通过知道确切的 URL,我仍然可以直接访问该功能。
我想我必须编写一个中间件来限制对某些功能的访问,但具体如何?
在此堆栈中处理此问题的正确且可接受的方法是什么?
谢谢! 阿尔芒 所以一切看起来都很好但是(!)
如何禁止直接访问隐藏的项目?我猜在这种情况下,路线是由 sanctum 控制的,而角色和权限是由 Spatie 的包控制的。
是否可以将两者联系起来?
谢谢!
【问题讨论】:
标签: laravel laravel-sanctum jetstream laravel-permission laravel-fortify