Bagaimana untuk menetapkan kaedah tetapan kebenaran Laravel Spatie untuk menentukan set kebenaran untuk setiap pengguna berdasarkan peranan?
P粉197639753
P粉197639753 2023-11-14 12:58:58
0
1
646

Saya mempunyai 4 jenis pengguna menggunakan sistem saya: 1.Super Admins2.Super Admin Team, 3.Adminsdan 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, untukPentadbir Supersaya harus menggunakan Pentadbir SuperPengawalBuat 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粉197639753
P粉197639753

membalas semua (1)
P粉736935587

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 :)

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!