【问题标题】:Centralize user role verification in laravel在 laravel 中集中用户角色验证
【发布时间】:2021-03-11 10:37:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: laravel authorization roles jetstream


    【解决方案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';
    });
    

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

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

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

    参考:Authorization 上的 Laravel 文档

    【讨论】:

    • 感谢您的回答,我已经使用过门,但我使用的方法不正确,但现在我阅读了文档,您所说的正是我所寻找的。​​span>
    猜你喜欢
    • 2014-07-18
    • 2019-10-30
    • 2015-05-23
    • 2021-02-25
    • 2016-11-29
    • 1970-01-01
    • 2021-12-06
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多