Spatie
Thêm trait vào model User
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}
Sau đó ta có thể:
- Gán vai trò cho user:$user = User::find(1); $user->assignRole('admin');
- Gán quyền trực tiếp:$user->givePermissionTo('edit articles');
- Gán quyền cho vai trò:$role = Role::findByName('admin'); $role->givePermissionTo('edit articles');
Kiểm tra quyền trong Controller
- Cách 1: bằng can()
public function update(Request $request)
{
if (!auth()->user()->can('edit articles')) {
abort(403, 'Bạn không có quyền thực hiện hành động này.');
}// tiếp tục xử lý
}
- Cách 2: middleware trong controllerpublic function __construct()
{
$this->middleware(['permission:edit articles'])->only(['edit', 'update']);
}
Dùng middleware để bảo vệ route
Trong
routes/web.php:
Route::group(['middleware' => ['role:admin']], function () {
Route::get('/admin', [AdminController::class, 'index']);
});
Hoặc:
Route::group(['middleware' => ['permission:edit articles']], function () {
Route::get('/article/edit', [ArticleController::class, 'edit']);
});
Hiện menu theo quyền trong blade
@can('edit articles')
<a href="{{ route('articles.edit') }}">Sửa bài viết</a>
@endcan@role('admin')
<a href="/admin">Quản trị</a>
@endrole
Kiểm tra nhiều quyền hoặc vai trò
auth()->user()->hasAnyRole(['admin', 'moderator']);
auth()->user()->hasAllRoles(['admin', 'editor']);
auth()->user()->hasPermissionTo('delete articles');
https://tritue.edu.vn/tuecode/tracnghiem30/index.php/baiviet/post/view/id/236?id=236