Как заставить каждого авторизованного пользователя видеть только свой продукт - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь выяснить, как аутентифицированный пользователь может видеть товары только со своей панели инструментов, т. Е. Каждый пользователь имеет уникальный список товаров и может создавать свои собственные товары. Теперь я вижу, что если какой-либо пользователь создает, удаляет или перечисляет продукт, на который влияют все пользователи.

Я пытался искать другие учебники, но не нашел решения.

web.php

Route::group(['prefix'=>'seller', 'middleware'=>     ['auth']],function() {
Route::get('/',function (){
    return view('seller.index', compact('products'));
});
Route::resource('product', 'productController');
Route::get('/seller', 'ProductController@seller')->name('seller');
});

User.php

 public function products()
 {
  return $this->hasMany(Products_model::class);
 }

Products_model

class products_model extends Model
{
protected $table='products';
protected $primaryKey='id';
protected $fillable=   ['pro_name','pro_price','pro_info','image','stock','category_id'];
}

ProductController

class productController extends Controller
{

public function index()
{
   $products=products_model::all();
   return view('seller.product.index',compact('products'));
}

public function user()
{
return $this->belongsTo(User::class);
}

public function create()
{

    return view('seller.product.create');

}

public function seller()
{
   $products=products_model::all();
   return view('seller.product.index',compact('products'));
}

public function store(Request $request)
{
    $formInput=$request->except('image');
    $this->validate($request, [
     'pro_name'=> 'required',
     'pro_price'=> 'required',
     'pro_info'=> 'required',
     'image'=>'image|mimes:png,jpg,jpeg|max:10000'
    ]);

    $image=$request->image;
    if($image){
        $imageName=$image->getClientOriginalName();
        $image->move('images', $imageName);
        $formInput['image']=$imageName;
    }

    products_model::create($formInput);
    return redirect()->back();
}

public function show($id)
{
    //
}

public function edit($id)
{
    //
}

public function update(Request $request, $id)
{
    //
}

public function destroy($id)
{
   $deleteData=products_model::findOrFail($id);
   $deleteData->delete();

   return redirect()->back();
}

}

Я хочу, чтобы у каждого пользователя была своя уникальная информационная панель, что означает, что если пользователь удаляет или создает продукт, он должен показываться только на его информационной панели, не затрагивая других.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Везде, где вам нужно отобразить только продукты аутентифицированного пользователя, измените свой запрос, чтобы отфильтровать продукты других людей:

public function controllerAction(Request $request)
{  
    $userId = $request->user()->id;
    // or $userId = Auth::id(); (Via the Auth facade)
    // or $userId = auth()->id();

    $products = products_model::where('user_id', $userId)->get();
}
0 голосов
/ 07 июня 2019

В вашей модели продукта вам нужно добавить user_id, чтобы связать пользователя таблиц с продуктами:

class products_model extends Model
{
    protected $table='products';
    protected $primaryKey='id';
    protected $fillable=   ['user_id',   'pro_name','pro_price','pro_info','image','stock','category_id']; 
}

После того, как в вашем контроллере вы можете отфильтровать продукты по пользователю и вернуть их, при создании нового продукта вы можете получить идентификатор пользователя и ввести новый продукт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...