首页 > 解决方案 > 如何使用 Laravel 仅显示特定用户的数据

问题描述

我正在尝试显示与用户相关的数据,但不幸的是它不起作用。目前,当我通过表单提交订单时,每个帐户都可以看到数据。如何仅显示提交数据的特定人员的数据?

数据库

表 digitizing_orders 表有

id | order_name | order_placement | user_id 

数字化订单模型

class Digitizingorder extends Model
{
   protected $table = "digitizing_orders";
   
   public function user()
   {
      return $this->belongsTo('App\User');
   }
}

用户模型

class User extends Authenticatable
{
   public function digitizing()
   {
      return $this->hasMany('App\Digitizingorder');
   }
}

控制器

public function index()
{ 
   $data = [
      'digitizings' => Digitizingorder::with('user')->where('id', '!=', Auth::id())->get()
   ];
   return view('front_end.Customerprofile.digitizing_view_order', $data);
}

标签: laravel

解决方案


使用策略,它们可以保护模型上的控制器操作免受未经授权的用户的影响。

生成并注册策略后,您可以使用如下方法:

class DigitizingorderPolicy
{
/**
 * Determine if the given Model can be Viewed by the user.
 *
 * @param  \App\User  $user
 * @param  \App\Digitizingorder $digitizingorder
 * @return bool
 */
public function view(User $user, Digitizingorder $digitizingorder)
{
    return $user->id === $digitizingorder->user_id;
}
}

您可以定义方法内部的内容以满足用户查看模型的条件(例如权限或角色)。

调用它的方法之一是在控制器中:

public function show(Request $request, Digitizingorder $digitizingorder )
{
    $this->authorize('view', $digitizingorder);

    // The current user can view the digitizingorder ...
}

我建议阅读有关它的文档,它们是使用策略的多种方式/方法,并且可能包含对您有用的内容。


推荐阅读