#laravel #validation #authentication
#laravel #проверка #аутентификация
Вопрос:
У меня есть текущий проект Laravel, и я сейчас учусь. Таким образом, в системе будет несколько пользователей, которые могут зарегистрироваться. Например, пользователь1 создал учетную запись и произвел транзакции и изменения в своей учетной записи. Когда пользователь2 регистрируется и входит в систему, пользователь2 видит все в учетной записи пользователя 1 вместо новой пустой панели мониторинга для начала. Я попытался добавить middleware->('auth');
свои маршруты, но это ничего не изменило.
HomeController
<?php
namespace AppHttpControllers;
use AppMoneyTrade;
use AppMoneyTradeDeposit;
use AppWithdrawal;
use IlluminateHttpRequest;
use LaravelUiPresetsVue;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return IlluminateContractsSupportRenderable
*/
public function index()
{
$moneytrades = MoneyTrade::all();
$moneytradeDeposits = MoneyTradeDeposit::all();
$amountSum = MoneyTradeDeposit::sum('amount');
$balance = Withdrawal::sum('amount');
return view('dashboard', compact('moneytrades', 'moneytradeDeposits', 'amountSum', 'balance'));
}
public function dashboard()
{
$moneytrades = MoneyTrade::all();
$moneytradeDeposits = MoneyTradeDeposit::all();
$amountSum = MoneyTradeDeposit::sum('amount');
$withdrawal = Withdrawal::all();
$balance = Withdrawal::sum('amount');
return view('dashboard', compact('moneytrades', 'moneytradeDeposits', 'amountSum',
'withdrawal', 'balance'));
}
public function stocks()
{
$amountSum = MoneyTradeDeposit::sum('amount');
return view('home.stocks', compact('amountSum'));
}
public function support()
{
return view('home.support');
}
public function withdrawal()
{
$moneytrades = MoneyTrade::all();
$moneytradeDeposits = MoneyTradeDeposit::all();
$amountSum = MoneyTradeDeposit::sum('amount');
$withdrawal = Withdrawal::all();
$balance = Withdrawal::sum('amount');
return view('home.withdrawal', compact('moneytrades', 'moneytradeDeposits', 'amountSum',
'withdrawal', 'balance'));
}
}
web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/send-mail', 'SendMailController@send')->middleware('auth');
Auth::routes();
Route::get('register/agreement', 'AuthRegisterController@show')->name('register.agreement');
Route::get('/home', 'HomeController@index')->name('home')->middleware('auth');;
Route::get('/dashboard', 'HomeController@dashboard')->name('home.dashboard')->middleware('auth');
Route::get('/my-account', 'MyAccountController@index')->name('myaccount.index')->middleware('auth');
Route::patch('/my-account/update', 'MyAccountController@update')->name('myaccount.update')->middleware('auth');
Route::get('/stocks', 'HomeController@stocks')->name('home.stocks')->middleware('auth');
Route::get('/support', 'HomeController@support')->name('home.support')->middleware('auth');
Route::get('/withdrawal-information', 'HomeController@withdrawal')->name('home.withdrawal')->middleware('auth');
Route::resource('withdrawal', 'WithdrawalController')->middleware('auth');
Route::resource('moneytrade', 'MoneyTradeController')->middleware('auth');
Route::resource('moneytrade-deposit', 'MoneyTradeDepositController');
Route::get('/account-removed', 'MoneyTradeController@destroy')->name('mt.delete')->middleware('auth');
Route::get('/trading-account', 'MoneyTradeController@view')->name('mt.view')->middleware('auth');
Route::get('/trading-account/deposits', 'MoneyTradeController@deposit')->name('mt.deposit')->middleware('auth');
Как я могу добиться этого и запретить другим пользователям доступ к другим панелям мониторинга, которые не являются их собственными? У меня нет ролей и просто обычных пользователей. Я просто хочу запретить одному пользователю доступ к панели управления другого пользователя. Спасибо!
Комментарии:
1.
user2 sees everything in user1's account instead of a fresh blank dashboard to get started with
пользователь1 вышел из системы, также можете ли вы привести пример некоторых маршрутов, которые видны обоим пользователям2. Да, пользователь1 вышел из системы, затем пользователь2 вошел в систему. Однако пользователь2 видит транзакции пользователя 1 и все остальное. В принципе, все маршруты должны быть доступны для всех пользователей. Однако не должны отображаться данные каждого пользователя из базы данных. В этом примере пользователь1 внес депозиты и снял средства со своей учетной записи, к которой у него есть доступ к собственной истории транзакций. Что происходит, даже когда я выхожу из системы user1 и логин user2, user2 все еще может видеть всю историю транзакций user1.
3. Для вашей панели мониторинга вы проверяете, принадлежат ли данные, которые вы отправляете в ваше представление, зарегистрированному пользователю или нет? например, с помощью Auth()::user() или Auth::id()
4. вам просто нужно сделать то же самое, вместо использования
all()
вы можете поставитьwhere()
условия, например, для вашей moneytrade в вашей функции панели мониторинга в контроллере, которую вы используете$moneytrades = MoneyTrade::all();
, вместо этого вы можете использовать$moneytrades = MoneyTrade::where('user_id', auth()->id())->get();
5. таким образом, он будет получать сведения только о вошедшем в систему пользователе, поэтому, если пользователь2 вошел в систему, данные не будут иметь user1 в вашем представлении