Hướng dẫn sử dụng trong code
Kiểm tra quyền
$employee = employee_account(); // App\Models\EmployeeAccount
// Kiểm tra permission
$employee->hasPermissionTo('department.create');
$employee->can('company.view');
// Kiểm tra role
$employee->hasRole('admin');
$employee->hasAnyRole(['admin', 'manager']);
// Kiểm tra nhiều permissions
$employee->hasAnyPermission(['company.create', 'company.update']);
$employee->hasAllPermissions(['company.view', 'company.create']);
Gán quyền
$employee = EmployeeAccount::find(1);
// Gán role
$employee->assignRole('admin');
$employee->assignRole('manager', company_id: 1); // trong company cụ thể
// Gán permission trực tiếp (không qua role)
$employee->givePermissionTo('department.create');
$employee->givePermissionTo(['department.create', 'department.update']);
// Đồng bộ roles (xoá roles cũ, gán roles mới)
$employee->syncRoles(['manager', 'staff']);
$employee->syncRoles(['manager'], company_id: 1);
Gỡ quyền
$employee = EmployeeAccount::find(1);
// Gỡ role
$employee->removeRole('admin');
// Gỡ permission
$employee->revokePermissionTo('department.create');
$employee->revokePermissionTo(['department.create', 'department.update']);
Lấy danh sách quyền
$employee = EmployeeAccount::find(1);
// Lấy tất cả permissions (trực tiếp + từ role)
$employee->getAllPermissions();
// Lấy danh sách roles
$employee->getRoleNames(); // collection string
$employee->roles; // collection Role model
// Lấy danh sách permissions
$employee->getPermissionNames(); // collection string
$employee->permissions; // collection Permission model
Role
use App\Models\Role;
// Tạo role mới
$role = Role::create([
'name' => 'editor',
'guard_name' => 'employee',
'company_id' => 1,
'status' => 'active',
]);
// Gán permission cho role
$role->givePermissionTo('department.create');
$role->syncPermissions(['department.view', 'department.create']);
// Lấy danh sách permissions của role
$role->permissions;
Direct Permissions
use App\Models\Permission;
// Tạo permission mới
$group = PermissionGroup::where('group_name', 'report_management')->first();
$permission = Permission::create([
'name' => 'report.view',
'guard_name' => 'employee',
'permission_group_id' => $group?->id,
]);
Middleware trong routes
// Kiểm tra permission
Route::middleware('permission:company.create')->post('/company/create', ...);
// Kiểm tra role
Route::middleware('role:admin')->group(...);
// Kiểm tra role hoặc permission
Route::middleware('role_or_permission:admin,company.create')->get('/company/{id}', ...);
Trong Blade views
@can('department.create')
<button>Thêm phòng ban</button>
@endcan
@role('admin')
<div>Quản trị viên</div>
@endrole
@hasanyrole('admin|manager')
<div>Admin hoặc Manager</div>
@endhasanyrole
Query employees theo role
// Lấy tất cả employee có role admin
$admins = EmployeeAccount::role('admin')->get();
$admins = EmployeeAccount::whereHas('roles', fn($q) => $q->where('name', 'admin'))->get();
// Lấy employee có permission cụ thể
$editors = EmployeeAccount::permission('department.create')->get();