Как заставить каждого авторизованного пользователя видеть только свой продукт
Я пытаюсь выяснить, как аутентифицированный пользователь может видеть продукты только со своей информационной панели, т. Е. Каждый пользователь имеет уникальный список продуктов и может создавать свои собственные продукты. Что я вижу сейчас, так это если какой-либо пользователь создает, удаляет или перечисляет продукт, который затрагивает всех пользователей.
Я пытался искать другие учебники, но не нашел решения.
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 ответа
Везде, где вам нужно отобразить только продукты аутентифицированного пользователя, измените свой запрос, чтобы отфильтровать продукты других людей:
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();
}
В вашей модели продукта вам нужно добавить 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'];
}
После того, как в вашем контроллере вы можете отфильтровать продукты по пользователю и вернуть их, при создании нового продукта вы можете получить идентификатор пользователя и ввести новый продукт.