تالار گفتمان nCIS.ir

نسخه‌ی کامل: چطور کاربر admin رو از کاربر معمولی تشخیص میدیم؟
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام

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

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

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

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


بعد میتونید چک کنید اگر کاربر ادمین بود یا مالک اون رکورد بود اجازه ویرایش یا حذف اون رو داره:
if (auth()->user()->is_admin || Gate::allows('update-post', $post)) {
    //
}
کد بالا رو در متد construct__ از کنترلر باید بنویسیم و تابع forUser رو استفاده نمیکنیم؟
نه دیگه کد رو موقعی که می خواهید مثلا طبق مثال بالا یک پست را ویرایش کنید توی همون اکشن می نویسید و داخل If چک می کنید که اگر کاربر ادمین بود یا مالک همین مطلب بود بهش اجازه آپدیت رو بده وگرنه اجازه ندهید