tritue.edu.vn


Dùng Laravel Permission của Spatie để quản lý vai trò (roles) và quyền hạn (permissions)

Spatie



Thêm trait vào model User

Copy
         

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

Copy
         

- 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 controller

public function __construct()
{
    $this->middleware(['permission:edit articles'])->only(['edit', 'update']);
}
 

 


Dùng middleware để bảo vệ route

Copy
         

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

Copy
         

@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ò

Copy
         

auth()->user()->hasAnyRole(['admin', 'moderator']);
auth()->user()->hasAllRoles(['admin', 'editor']);
auth()->user()->hasPermissionTo('delete articles');
 




Link chia sẻ bài viết
Copy
            https://tritue.edu.vn/tuecode/tracnghiem30/index.php/baiviet/post/view/id/236?id=236