مهدی جباری
1 سال پیش توسط مهدی جباری مطرح شد
3 پاسخ

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

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


ثبت پرسش جدید
مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش آپدیت شد
0

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

در پکیج 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 1 سال پیش مطرح شد
1

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

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

سپاسگزارم


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 1 سال پیش آپدیت شد
0

سلام
در مستندات رسمی این پکیج به صورت خاص یک راهکار برای این موضوع داده که باعث میشه همه دسترسی ها برای 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


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

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