您好,登錄后才能下訂單哦!
在 Laravel 框架中,權限繼承通常是通過使用角色(Role)和權限(Permission)這兩個模型來實現的。你可以通過以下步驟來設置權限繼承:
首先,你需要使用 Laravel 的 Artisan 命令行工具來創建 Role 和 Permission 模型。運行以下命令:
php artisan make:model Role -m
php artisan make:model Permission -m
這將在 app
目錄下創建 Role
和 Permission
模型,并在 database/migrations
目錄下創建相應的遷移文件。
接下來,你需要在遷移文件中定義 Role 和 Permission 數據表的結構。打開 database/migrations
目錄下的遷移文件,修改 up()
方法,添加以下內容:
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
});
Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
});
}
然后運行 php artisan migrate
命令來創建數據表。
在 Role 和 Permission 模型中,你需要定義它們之間的多對多關系。打開 app/Models/Role.php
文件,添加以下方法:
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
接下來,打開 app/Models/Permission.php
文件,添加以下方法:
public function roles()
{
return $this->belongsToMany(Role::class);
}
為了實現權限檢查,你需要創建一個中間件。運行以下命令:
php artisan make:middleware CheckPermission
這將在 app/Http/Middleware
目錄下創建 CheckPermission.php
文件。修改 handle()
方法,添加以下內容:
public function handle(Request $request, Closure $next, $permission)
{
if (Auth::guest() || !$request->user()->can($permission)) {
abort(403, 'Unauthorized action.');
}
return $next($request);
}
接下來,你需要在 app/Http/Kernel.php
文件中注冊中間件。將以下代碼添加到 $routeMiddleware
數組中:
'permission' => \App\Http\Middleware\CheckPermission::class,
現在你可以為角色分配權限。首先,你需要創建一些權限。運行以下命令:
php artisan make:permission CreatePost
php artisan make:permission EditPost
php artisan make:permission DeletePost
這將在 database/migrations
目錄下創建新的遷移文件。修改這些文件,為每個權限定義 name
和 display_name
。
然后運行 php artisan migrate
命令來創建權限。
接下來,你可以為角色分配權限。例如,你可以將 CreatePost
權限分配給 author
角色。首先,獲取角色和權限的實例:
$role = Role::where('name', 'author')->first();
$permission = Permission::where('name', 'create-post')->first();
然后,將權限分配給角色:
$role->givePermissionTo($permission);
最后,你可以在路由中使用 permission
中間件來保護需要權限的路由。例如,你可以在 routes/web.php
文件中添加以下代碼:
Route::middleware(['permission:create-post'])->group(function () {
Route::post('/posts', [PostController::class, 'create']);
});
這樣,只有具有 create-post
權限的用戶才能訪問 /posts
路由。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。