راکت

تعریف سوپر ادمین در spatie

3 پاسخ

سلام
در پروژه لاراولی که از پکیج spatie برای سطح دسترسی استفاده شده، چگونه میشود سوپر ادمین تعریف کرد که رول ها و پرمیشن ها رو برای سوپر ادمین چک نکنه؟

ثبت پرسش جدید

پاسخ‌ها

3
مهدی نظری
مهدی نظری
@mahdi.nazari

تخصص: توسعه دهنده Front End

سلام 🖐
امیدوارم حالت خوب و عالی باشی🙏

در پکیج Laravel Spatie Permission، شما می‌توانی با استفاده از مفهوم "سوپر ادمین" یا "Super Admin" کاربری را تعریف کنی که از چک کردن رول‌ها و مجوزها در مواقع خاص مستثنی هستن . برای این کار، می‌تونی از گیت‌هوک‌ها (Middleware) و یا سیاست‌ها (Policies) استفاده کنی. در ادامه، دو روش را توضیح میدم بهت

با استفاده ازدستور php artisan make:middleware یه گیت هوک درست میکنیم

در فایل SuperAdminMiddleware، در متد handle، شرطی را بررسی میکنیم که اگر کاربر "سوپر ادمین" باشد، بدون انجام چک رول‌ها و مجوزها به مسیر مورد نظر ادامه بده

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class SuperAdminMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        if (auth()->user() && auth()->user()->isSuperAdmin()) {
            return $next($request);
        }

        return abort(403, 'Unauthorized');
    }
}

در فایل app/Http/Kernel.php، می‌تونی اینو رو به لیست routeMiddleware اضافه کنی

protected $routeMiddleware = [
    // ...
    'superadmin' => \App\Http\Middleware\SuperAdminMiddleware::class,
];

و در نهایت حالا می‌توانید از superadmin برای تعیین سطح دسترسی "سوپر ادمین" در روت‌ها و گروه‌های مسیر استفاده کنی اینطوری

Route::middleware(['auth', 'superadmin'])->group(function () {
    // مسیرها و گروه‌های دیگر
});

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

امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹

مهدی جباری
مهدی جباری
@m.h.jabbary

سلام مرسی از لطف تون که وقت گذاشتین
من تا حالا دستی رول پرمیشن درست میکردم این سری خاستم از این پکیج استفاده کنم

تست میکنم نتیجه عرض میکنم

سپاسگزارم

شاید پاسخ شما همین‌جا باشد

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

سلام
در مستندات رسمی این پکیج به صورت خاص یک راهکار برای این موضوع داده که باعث میشه همه دسترسی ها برای superadmin فعال باشند:

use Illuminate\Support\Facades\Gate;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        // Implicitly grant "Super Admin" role all permissions
        // This works in the app by using gate-related functions like auth()->user->can() and @can()
        Gate::before(function ($user, $ability) {
            return $user->hasRole('Super Admin') ? true : null;
        });
    }
}

مستندات رسمی پکیج:
https://spatie.be/docs/laravel-permission/v5/basic-usage/super-admin

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام