在 laravel 中集中进行用户角色验证

Centralize user role verification in laravel

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

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

我的问题是,我可以实现类似门的东西来集中条件吗?我的意思是,以防万一我需要更改它只在一个文件中执行它并避免在我执行的所有行中执行它它。 欢迎任何帮助。谢谢!

是的。只需定义门或使用模型策略。使用门,你可以做类似的事情(以 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';
});

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

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

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

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

参考文献:Laravel Authorization

上的文档