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'); >); 
 public function products() < return $this->hasMany(Products_model::class); > 
class products_model extends Model
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(); > 

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

Читайте также:  Зарплата мидл разработчика java

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(); > 

products_model::all(); должно быть products_model::where(‘user_id’, $userId)->get(); и products_model::findOrFail($id); должно быть products_model::where(‘user_id’, $userId)->findOrFail($id);

Потому что вам нужно скопировать бит, в котором я определяю $userId 😉 Или просто замените любую ссылку $userId на auth()->id() .

Я изменил код, но получаю сообщение об ошибке «Вызов неопределенного метода App \ User :: id ()» @ Jack

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

class products_model extends Model

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

Я добавил это в таблицу моделей и продуктов, но все равно получаю сообщение об ошибке Call to undefined method App\User::id() @bayocr

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Страницы 1

#1 06.06.2017 17:11:41

Нужно, чтобы пользователь видел только свои экземпляры сущностей

Схема приложения такая: имеются пользователи, которые создают кампании. У кампании есть зависимые сущности. Например, компания имеет офис, офис связан с заказом. Заказ связан с исполнителем, который напрямую связан с компанией.

Как правильно сделать так, чтобы авторизованный пользователь видел только свои экземпляры сущностей?
Например, вывести все заказы исполнителя такого-то.

Усложняет все тот момент, что сущностей много, все методы и взаимодействие уже прописано. Как решить этот вопрос с наименьшими временными потерями и не нарушить архитектуру?

Архитектура приложения простая:
контроллеры -> бизнес-слой -> репозитории -> модель

#2 07.06.2017 01:21:13

Re: Нужно, чтобы пользователь видел только свои экземпляры сущностей

Может я чего-то не понимаю , но по моему это делается стандартными запросами в моделях при помощи обычных отношений . Получаете пользователя внедрением его в метод либо через фасад Auth::user() а далее у вас есть полный доступ ко всем связанным таблицам данного пользователя и вы можете отфильтровать коллекцию как вам угодно и передать её в представление . Если проблема в том , что код никак не поменять , на ум приходит только global scope https://laravel.com/docs/5.4/eloquent#global-scopes .

#3 07.06.2017 11:38:38

Re: Нужно, чтобы пользователь видел только свои экземпляры сущностей

Сейчас все решения, что у меня есть сводятся к одному: добавлять join к каждому запросу для получения нужного результат.
Если честно, думал, что есть более элегантные и «правильные» решения этому вопросу.

Спасибо за наводку, прочитаю так же про global scope.

Источник

Как заставить каждого авторизованного пользователя видеть только свой продукт

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

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

 public function products() < return $this->hasMany(Products_model::class); > 
class products_model extends Model
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(); > 

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

Источник

Разные страницы для разных пользователей, использующих PHP

Я хочу знать, как я могу заставить пользователя «Маккензи» увидеть свою собственную уникальную страницу, с которой он может манипулировать, и «Венди», чтобы увидеть свою собственную страницу, когда она войдет в систему. Я создал логин и страницы, связал их с базой данных MySQL, указав их идентификатор и т.д., Поэтому я могу сделать все это, и я знаю о сеансах и т.д.;) Так может кто-то сказать мне, как я это сделаю, должен ли я создавать разные страницы для каждого отдельного пользователя? Я думаю что-то вроде СТРАНИЦА РЕГИСТРА: Храните данные в базе данных, получите идентификатор пользователя и используйте «? Pageid = 1», чтобы затем перейти на страницу с идентификатором. Но я не уверен, как бы я сделал каждую страницу, не делая их вручную, так как вы можете себе представить, что создание новой страницы для каждого отдельного пользователя будет больно. и очень неэффективно. Есть идеи? И, пожалуйста, покажите мне пример с кодом, это было бы БОЛЬШЕ оценено! Спасибо всем заранее!

Возможно, вы захотите посмотреть информацию об идентификаторах сеансов. Вы спрашиваете много, и может потребоваться несколько сценариев, чтобы сделать то, что вам нужно. Я рекомендую прочитать несколько руководств, прежде чем задавать подобные вопросы в SO. Вот пример один: w3schools.com/php/php_sessions.asp

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

Вы не будете использовать их для создания новой страницы. Это можно сделать с помощью php, а затем использовать идентификатор сеанса для идентификации вошедшего в систему пользователя. Вам понадобится скрипт, который создает пользователя, с паролем (я надеюсь, что вы зашифруете это), затем страница, которая позволяет войти в систему, и затем страница, которая позволяет зарегистрированным пользователям добавлять что-либо, и страница, которая показывает все элементы, которые они добавили и т. д.

Я поставил под сомнение все это, я сделал все это. Все, что я спрашиваю, это 1 вещь, как заставить другого пользователя видеть другую страницу без физического создания страницы, которую я создал сценарий входа в систему и сценарий регистрации и зашифрованную базу данных mysql.

Если у вас есть переменная типа pageid, вы можете получить ее, используя $_GET[‘pageid’] && $_GET[‘user_id’] если вы использовали ее как часть переменных сеанса.

Я имею в виду $_SESSION[‘user_id’] . Обратите внимание, что вам нужно будет создать отдельную php-страницу для включения переменных, но она будет одинаковой для каждого пользователя, только с разными данными, основанными на вашем sql-запросе и их user_id.

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

Источник

Оцените статью