如何将 Spatie 的 laravel 权限与 JetStream 正确集成?

问题描述

我在 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 的包控制。

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

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...