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();
← Multi-tenant với Team Feature Controllers thay đổi →