我正在一家电子商务网站上工作,我需要根据用户角色显示某些数据。基本上,该页面可以由三种类型的用户查看:进入页面的普通用户以及拥有其帐户但根据其角色看到不同按钮/数据的客户用户或管理员。我正在使用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';
});
并使用blade指令在.blade.php
文件中使用它@can
。
@can('edit-post')
// show an edit button
@endcan
@can('delete-post')
// show a delete button
@endcan
在这里,我们基本上创建了两个用于编辑和删除帖子的控件。要编辑帖子(或查看编辑按钮),你必须是管理员或用户必须创建了该帖子。要删除它,你必须是管理员。
参考:Laravel授权文档
感谢您的回答,我已经使用了Gates,但是使用的方法不正确,但是现在我阅读了文档,您说的是我要寻找的内容。