Spatie Laravel Permission là một package mạnh mẽ dành cho Laravel, được thiết kế để quản lý quyền (permissions) và vai trò (roles) trong các ứng dụng Laravel một cách dễ dàng. Nó cho phép bạn gắn vai trò vào người dùng và định nghĩa các quyền cho từng vai trò, giúp bạn kiểm soát truy cập theo cách chi tiết và hiệu quả.
Dưới đây là bài hướng dẫn chi tiết để cài đặt và sử dụng Spatie Laravel Permission:
1. Cài đặt Package
Bước 1: Cài đặt thông qua Composer
Bạn có thể cài đặt package này bằng lệnh Composer:
composer require spatie/laravel-permissionBước 2: Đăng ký Service Provider (bỏ qua bước này nếu sử dụng Laravel 9+)
Laravel tự động đăng ký service provider cho bạn. Nếu bạn đang dùng phiên bản Laravel cũ hơn, hãy thêm vào file config/app.php:
'providers' => [
// ...
Spatie\Permission\PermissionServiceProvider::class,
];2. Cấu hình & Database
Bước 1: Xuất bản file config và migrations
Chạy lệnh sau để xuất bản file cấu hình và các file migration:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"File cấu hình sẽ được tạo tại: config/permission.php.
Bước 2: Run migrations
Thực hiện lệnh sau để tạo các bảng cần thiết:
php artisan migrateCác bảng được tạo:
roles: Lưu thông tin các vai trò.permissions: Lưu các quyền cụ thể.model_has_roles: Liên kết người dùng với vai trò.model_has_permissions: Liên kết người dùng với quyền.role_has_permissions: Liên kết vai trò với quyền.
3. Thêm Traits vào Model
Thêm trait HasRoles vào model User của bạn để kích hoạt các chức năng của Spatie Laravel Permission:
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}Bạn cũng có thể sử dụng package này với bất kỳ model nào, không chỉ riêng User.
4. Quản lý roles và permissions
Tạo role
Sử dụng lệnh Artisan:
php artisan permission:create-role adminHoặc sử dụng trong code:
use Spatie\Permission\Models\Role;
$role = Role::create(['name' => 'admin']);Tạo permission
Sử dụng lệnh Artisan:
php artisan permission:create-permission edit articlesHoặc sử dụng trong code:
use Spatie\Permission\Models\Permission;
$permission = Permission::create(['name' => 'edit articles']);Gán permission cho role
$role->givePermissionTo('edit articles');
// Hoặc
$permission->assignRole('admin');Gán role cho người dùng
$user = User::find(1);
$user->assignRole('admin');Kiểm tra permission
Bạn có thể kiểm tra quyền hoặc vai trò dễ dàng:
if ($user->hasRole('admin')) {
// Người dùng là admin
}
if ($user->can('edit articles')) {
// Người dùng có quyền edit articles
}5. Middleware bảo vệ Route
Package cung cấp các middleware sẵn để kiểm tra quyền hoặc vai trò.
Kiểm tra role
Thêm middleware vào route:
Route::group(['middleware' => ['role:admin']], function () {
Route::get('/admin', [AdminController::class, 'index']);
});Kiểm tra permission
Route::group(['middleware' => ['permission:edit articles']], function () {
Route::get('/edit-article', [ArticleController::class, 'edit']);
});Kết hợp nhiều roles hoặc permissions
Bạn có thể kết hợp logic kiểm tra với | (hoặc) và & (và):
Route::group(['middleware' => ['role:admin|editor']], function () {
// Người dùng phải có vai trò admin hoặc editor
});
Route::group(['middleware' => ['permission:edit articles&delete articles']], function () {
// Người dùng phải có cả hai quyền edit và delete articles
});6. Tích hợp tùy biến
Thay đổi bảng Model
Nếu bạn không sử dụng model User mặc định, bạn có thể cấu hình trong config/permission.php:
'models' => [
'user' => App\Models\CustomUser::class,
],Bổ sung permission tự động
Bạn có thể định nghĩa các quyền mặc định và thêm chúng vào khi ứng dụng khởi động:
use Spatie\Permission\Models\Permission;
Artisan::command('setup:permissions', function () {
$permissions = ['create articles', 'edit articles', 'delete articles'];
foreach ($permissions as $permission) {
Permission::firstOrCreate(['name' => $permission]);
}
$this->info('Quyền đã được thêm!');
});7. Giao diện người dùng
Bạn có thể tạo một giao diện quản lý vai trò và quyền. Dưới đây là gợi ý cơ bản:
- Controller: Tạo controller để xử lý vai trò và quyền.
- View: Tạo form để thêm/xóa/sửa vai trò, quyền.
- Kết nối với route: Thêm route vào file
web.php.
Kết luận
Spatie Laravel Permission là một package rất mạnh mẽ và linh hoạt, giúp bạn quản lý quyền và vai trò trong ứng dụng Laravel dễ dàng. Với hướng dẫn này, bạn đã có thể cài đặt và sử dụng cơ bản, cũng như tích hợp sâu hơn vào ứng dụng của mình.
Hy vọng bài viết hữu ích với bạn. Nếu có bất kỳ câu hỏi nào, hãy để lại bình luận bên dưới. Đừng quên theo dõi CodeTutHub để nhận thêm nhiều bài viết chất lượng về lập trình! 🎉









