0

我正在开发一个电子商务网站,我需要根据用户角色显示某些数据。基本上,该页面可以由三种类型的人查看:进入页面的普通人以及拥有帐户但他们看到不同按钮/数据的客户用户或管理员。我正在使用 jetstream 身份验证系统,我所做的只是在我的视图中验证用户角色,如下所示:

@if (Auth::user()->role->name == 'admin')
    //display button only the admin can see
@else
    //display button only a client user can see
@endif       

我的问题是,我可以实现像门这样的东西来集中条件吗?我的意思是,如果我只需要在一个文件中更改它并避免在我实现它的所有行中都这样做。欢迎任何帮助。谢谢!

4

1 回答 1

1

是的。只需定义门或使用模型策略。使用门,您可以执行以下操作(以Post模型为例):

Gate::define('edit-post', function (User $user, Post $post) {
  return $user->role->name == 'admin' || $user->id == $post->user_id;
});


Gate::define('delete-post', function (User $user, Post $post) {
  return $user->role->name == 'admin';
});

并使用刀片指令在您的.blade.php文件中使用它。@can

@can('edit-post')
// show an edit button
@endcan

@can('delete-post')
// show a delete button
@endcan

在这里,我们基本上创建了两个用于编辑和删除帖子的控件。要编辑帖子(或者更确切地说是查看编辑按钮),您要么必须是管理员,要么用户必须已经创建了帖子。要删除它,您必须是管理员。

参考:Laravel授权文档

于 2020-11-29T09:19:02.937 回答