رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چطور کاربر admin رو از کاربر معمولی تشخیص میدیم؟
#1
سلام

چطور کاربر admin رو از کاربر معمولی تشخیص میدیم؟
منظورم وقتیه که کاربر لاگین رو انجام داده و حالا برای متدهای یه کنترلر میخوایم مجوز دسترسی قرار بدیم.
مثلاً اگه کاربر معمولی بود نتونه به متد delete دسترسی داشته باشه اما اگه admin بود به متد دسترسی پیدا کنه.
روش خاصی در لاراول برا این کار هست یا یه کدی مثل کد زیر باید بنویسیم؟
if(Auth::user()->is_admin === 1){
    $this->middleware('auth');
}
else{
    $this->middleware('auth', ['except' => [
        'delete',
    ]]);
}

در غیر از کنترلر یعنی در Route group چطور میتونیم نوع کاربر لاگین کرده رو تعیین کنیم؟

متشکرم
پاسخ
تشکر شده توسط:
#2
اگر منظورتون این هست که یک ادمین دارید که میتونه به همه مطالب همه کاربران دسترسی داشته باشه معمولا تو جدول users یک فیلد به صورت Boolean تعریف می کنیم که اگر 1 بود کاربر ادمین هست و 0 کاربر معمولی. تو مدل هم این پراپرتی رو به این صورت تعریف کنید تا فیلد is_admin رو تبدیل به نوع Boolean کنید:

protected $casts = [
        'is_admin' => 'boolean',
    ];


بعد میتونید چک کنید اگر کاربر ادمین بود یا مالک اون رکورد بود اجازه ویرایش یا حذف اون رو داره:
if (auth()->user()->is_admin || Gate::allows('update-post', $post)) {
    //
}
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: abdollah110110
#3
کد بالا رو در متد construct__ از کنترلر باید بنویسیم و تابع forUser رو استفاده نمیکنیم؟
پاسخ
تشکر شده توسط:
#4
نه دیگه کد رو موقعی که می خواهید مثلا طبق مثال بالا یک پست را ویرایش کنید توی همون اکشن می نویسید و داخل If چک می کنید که اگر کاربر ادمین بود یا مالک همین مطلب بود بهش اجازه آپدیت رو بده وگرنه اجازه ندهید
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط: abdollah110110




کاربران در حال بازدید این موضوع: 4 مهمان