Warm tip: This article is reproduced from serverfault.com, please click

authorization-在laravel中集中用户角色验证

(authorization - Centralize user role verification in laravel)

发布于 2020-11-29 07:00:38

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

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

我的问题是,我是否可以实施类似门的措施来集中条件?我的意思是,如果我只需要在一个文件中进行更改,而避免在我曾要求过的所有行中进行更改,则可以这样做。欢迎任何帮助。谢谢!

Questioner
Abraham Arreola
Viewed
0
tamrat 2020-11-29 17:19:02

是的。只需定义门或使用模型策略即可。使用盖茨,你可以执行类似操作(以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指令.blade.php文件中使用它@can

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

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

在这里,我们基本上创建了两个用于编辑和删除帖子的控件。要编辑帖子(或查看编辑按钮),你必须是管理员或用户必须创建了该帖子。要删除它,你必须是管理员。

参考:Laravel授权文档