Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menetapkan kaedah tetapan kebenaran Laravel Spatie untuk menentukan set kebenaran untuk setiap pengguna berdasarkan peranan?

Saya mempunyai 4 jenis pengguna menggunakan sistem saya: 1.Super Admins 2.Super Admin Team, 3.Admins dan 4. Ahli Pasukan Pengurusan, Oleh kerana saya menggunakan spatie untuk mengendalikan peranan dan kebenaran, saya mempunyai satu set modul (kebenaran) yang biasa kepada semua jenis pengguna dan satu lagi set modul (kebenaran) yang hanya untuk pentadbir super, seperti kaedah pembayaran, dsb. Sekarang, setelah pangkalan data saya disemai untuk mendapatkan kebenaran, adakah saya perlu menyemai semuanya sekaligus? ['contacts','email','bids'] Didatangkan dengan Pengawal Rangkaian (tetapi saya agak keliru tentang penggunaan pengawal yang tepat dan cara ia berfungsi) jadi pentadbir hanya boleh memberikan kebenaran kepada pasukannya daripada kebenaran yang dibenarkan ini Namun, untuk Pentadbir Super saya harus menggunakan Pentadbir Super Pengawal Buat set kebenaran tambahan? Saya ingin tahu apakah amalan terbaik. Kes Penggunaan: Super AdministratorMula-mula log masuk ke sistem dan kemudian tentukan daripada senarai kebenaran yang harus diberikan kepada pentadbir. 2. Pentadbir log masuk ke dalam sistem dan menetapkan set kebenaran yang akan diberikan kepada pasukannya, tetapi pentadbir tidak akan dapat melihat senarai kebenaran yang dimiliki oleh pentadbir super. Saya harap saya telah menjelaskan maksud saya, sila beritahu saya cara yang sesuai untuk melaksanakannya.

P粉197639753P粉197639753363 hari yang lalu867

membalas semua(1)saya akan balas

  • P粉736935587

    P粉7369355872023-11-15 10:44:18

    Saya rasa anda menggunakan model iaitu pengguna dan memberikan kebenaran terus kepada pengguna. Inilah pendekatan saya Jadi, apa yang anda boleh lakukan ialah, anda boleh mencipta peranan dahulu dan memberikan kebenaran yang sesuai kepada peranan itu dan kemudian menetapkan peranan itu kepada pengguna.

    Pertama, tetapkan kebenaran kepada peranan

    $role->syncPermissions(['permission-1', 'permission-2', '...']);

    Sekarang, segerakkan peranan dengan pengguna

    $user->assignRole('writer');
    
    // Or, you can also assign multiple roles
    $user->assignRole('writer', 'admin');

    Ini ialah perisian tengah spatie terbina dalam yang boleh anda tulis dalam app/Http/Kernel.php

    protected $routeMiddleware = [
        // ...
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ];

    Kini anda boleh menggunakan perisian tengah "peranan" dalam laluan untuk melindungi,

    // for superadmin
    Route::group(['middleware' => ['role:superadmin']], function () {
        //
    });
    
    // for admin
    Route::group(['middleware' => ['role:admin']], function () {
        //
    });
    
    // Or with multiple roles
    Route::group(['middleware' => ['role:superadmin|admin']], function () 
    {
        //
    });
    
    ...

    Jadi, kini anda perlu mendapatkan kebenaran untuk peranan tertentu iaitu Super Admin atau Administrator. Inilah yang boleh anda lakukan,

    // get all permissions associated with a role
    $role->permissions;
    
    // get specific columns of permissions
    $role->permissions->pluck('name');

    Selain itu, anda boleh mendapatkan peranan pengguna dengan cara ini

    auth()->user()->roles;
    
    // Or get only role names
    auth()->user()->getRoleNames();
    
    // Or check if user has a specific role
    auth()->user()->hasRole('admin')

    Seperkara lagi, untuk super admin, anda tidak perlu mendapatkan kebenaran daripada peranan, anda boleh mendapatkan semua kebenaran terus. Dan memandangkan pentadbir super mempunyai akses kepada keseluruhan sistem, anda boleh memintas semakan kebenaran pentadbir super dengan melakukan ini,

    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('superadmin') ? true : null;
            });
        }
    }

    Semoga ia membantu anda :)

    balas
    0
  • Batalbalas