ما دو کاربر داریم قرض کنید با آی دی و نام های زیر
من آمدم کد زیر را نوشتم برای لاگین کردن کاربران و ویرایش اطلاعات کاربران
web.php
Route::group(['middleware' => 'auth', 'prefix' => 'user/panel'], function () {
Route::get('/', 'UserController@index')->name('user.panel');
Route::get('{user}/edit', 'UserController@edit')->name('user.panel.edit');
Route::get('/update', 'UserController@update')->name('user.panel.update');
});
فرض کنید کاربر با آی دی 1 با آدرس http://localhost:8000/user/panel/1/edit آمد لاگین کرد و بعد با آدرس http://localhost:8000/user/panel/2/edit می تواند اطلاعات حسن محمودی را هم ببیند و هم ویرایش کند.
دو روش هست یک اینکه اصلا با id در url کار نکنید و بجاش اطلاعات کاربر رو از همون اطلاعات شخصی که لاگین کرده بگیرید یعنی
auth()->user()
و روش دوم اینکه اگر خیلی اصرار دارید از روش خودتون استفاده کنید نیازه چک کنید مثلا ای دی شخصی که قرار ویرایش بشه و با ای دی شخصی که لاگین کرده یکی هست یا نه اگر بود اجازه داره اگر نبود اجازه نداره.
سلام
@oxbir
شما اطلاعاتی که در سمت کنترلر میگیرید رو حتما حتما ولیدیشن کنید با اطلاعاتی که تو دیتابیس دارید
در سشن دارید
در جاهای دیگه دارید
تا به فرض یوزر 1 دسترسی برای ادیت یوزر 2 نداشته باشه
آیدی رو چک کنید
پسورد رو چک کنید
سشن رو چک کنید
ایمیل رو چک کنید
شاید پاسخ شما همینجا باشد
سلام مجدد
من از روش دوم استفاده کردم به ان شکل نوشتم نمیدونم منظ.رتون اینه؟
web.php
Route::middleware(['auth', 'checkLogin'])->prefix('user/panel')->group(function () {
بعد امدم توی Kernel.php
'checkLogin' => \App\Http\Middleware\CheckLogin::class,
CheckLogin.php
public function handle($request, Closure $next)
{
if (auth()->user()->id){
return $next($request);
}
}
هیچ چیز برای من اتفاق خاصی نیافتاد. نمی دونم شاید من اشتباه میکنم
سلام
شما باید Permision تعریف کنید یعنی فقط ادمین و خود اون کاربر بتونه به این صفحه دسترسی داشته باشه مثلا یه تابع بنویسید اگه user_group بالاتر از 10 یا user_id برابر بود با ایدی که در سشن ذخیره کردید اون وقت این صفحه را نمایش بده