【问题标题】:How to integrate Spatie's laravel-permission with JetStream properly?如何将 Spatie 的 laravel-permission 与 JetStream 正确集成?
【发布时间】: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


    【解决方案1】:

    你试过this吗?似乎他们为 Spatie 添加了完全相同的内容。不过,我认为您需要添加一个门权限检查,例如

    abort_if(Gate::denies('permission'), Response::HTTP_FORBIDDEN, '403 Forbidden');
    

    每一个动作

    【讨论】:

      【解决方案2】:

      我发现自己处于同样的境地和 Laravel Daily 的视频

      (https://www.youtube.com/watch?v=NiQSNjWKLfU&t=974s)

      他谈到了您需要如何限制前端并保护您的后端,您已经完成了限制前端的部分。这是他项目的github链接,也许你可以查看他的代码以获得进一步的解释:

      https://github.com/LaravelDaily/Laravel-Jetstream-MultiAuth-Roles

      【讨论】:

        【解决方案3】:

        我想看看你是否可以使用 laravel 内置的 can middleware。然后您也许可以更新您的路线定义。类似的东西

        Route::get('/profile', 'ProfileController@index')->middleware('can:access profile');
        

        我还没有对您正在使用的包执行此操作,但我认为如果刀片 @can 等其他内置功能正常工作,它应该可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-16
          • 2016-12-04
          • 1970-01-01
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多