چگونه کاربر را با شماره id دیگران نتواند وارد شود

- 2 هفته پیش
توسط هشنا آپدیت شد
محمود خسروی ( 2519 تجربه )
3 هفته پیش

ما دو کاربر داریم قرض کنید با آی دی و نام های زیر

  1. علی مرادی
  2. حسن محمودی

من آمدم کد زیر را نوشتم برای لاگین کردن کاربران و ویرایش اطلاعات کاربران

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 می تواند اطلاعات حسن محمودی را هم ببیند و هم ویرایش کند.

بهترین پاسخ انتخاب شده توسط محمود خسروی
حسام موسوی ( 131439 تجربه )
3 هفته پیش

دو روش هست یک اینکه اصلا با id در url کار نکنید و بجاش اطلاعات کاربر رو از همون اطلاعات شخصی که لاگین کرده بگیرید یعنی

auth()->user()

و روش دوم اینکه اگر خیلی اصرار دارید از روش خودتون استفاده کنید نیازه چک کنید مثلا ای دی شخصی که قرار ویرایش بشه و با ای دی شخصی که لاگین کرده یکی هست یا نه اگر بود اجازه داره اگر نبود اجازه نداره.

Alimotreb ( 91342 تجربه )
3 هفته پیش

سلام
@oxbir

شما اطلاعاتی که در سمت کنترلر میگیرید رو حتما حتما ولیدیشن کنید با اطلاعاتی که تو دیتابیس دارید
در سشن دارید
در جاهای دیگه دارید
تا به فرض یوزر 1 دسترسی برای ادیت یوزر 2 نداشته باشه
آیدی رو چک کنید
پسورد رو چک کنید
سشن رو چک کنید
ایمیل رو چک کنید

محمود خسروی ( 2519 تجربه )
3 هفته پیش

سلام مجدد

@hesammousavi

من از روش دوم استفاده کردم به ان شکل نوشتم نمیدونم منظ.رتون اینه؟

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

هیچ چیز برای من اتفاق خاصی نیافتاد. نمی دونم شاید من اشتباه میکنم

حسام موسوی ( 131439 تجربه )
3 هفته پیش

برای چک کردن لاگین از این کد استفاده میشه

auth()->check()
محمود خسروی ( 2519 تجربه )
2 هفته پیش

سلام

@Alimotreb

سشن را چطوری چک کنم؟

هشنا ( 365 تجربه )
2 هفته پیش

سلام
شما باید Permision تعریف کنید یعنی فقط ادمین و خود اون کاربر بتونه به این صفحه دسترسی داشته باشه مثلا یه تابع بنویسید اگه user_group بالاتر از 10 یا user_id برابر بود با ایدی که در سشن ذخیره کردید اون وقت این صفحه را نمایش بده

برای ارسال پاسخ باید وارد سایت شوید