Models
EmployeeAccount (app/Models/EmployeeAccount.php)
Model auth chính, sử dụng guard employee.
use Spatie\Permission\Traits\HasRoles;
class EmployeeAccount extends Authenticatable
{
use HasApiTokens, HasRoles;
protected $guard_name = 'employee';
// ...
}
Quan hệ:
employeeInfo()→ HasOne → EmployeeInforoles()→ Spatie HasRoles cung cấppermissions()→ Spatie HasRoles cung cấp
Accessors:
getCompanyAttribute()→ lấy company qua employeeInfo → department → companygetDepartmentAttribute()→ lấy departments của company
Role (app/Models/Role.php)
Extends Spatie\Permission\Models\Role, thêm company() relationship.
class Role extends SpatieRole
{
protected $fillable = ['name', 'guard_name', 'company_id', 'status'];
public function company(): BelongsTo
{
return $this->belongsTo(Company::class);
}
}
Permission (app/Models/Permission.php)
Extends Spatie\Permission\Models\Permission, thêm permissionGroup() relationship.
class Permission extends SpatiePermission
{
public function permissionGroup(): BelongsTo
{
return $this->belongsTo(PermissionGroup::class);
}
}
PermissionGroup (app/Models/PermissionGroup.php)
Giữ lại từ code cũ, dùng để nhóm các permission hiển thị trên UI.
class PermissionGroup extends Model
{
protected $fillable = ['group_name'];
public function permissions(): HasMany
{
return $this->hasMany(Permission::class, 'permission_group_id');
}
}
Quan hệ giữa các model
PermissionGroup (permission_groups)
└─ hasMany → Permission (permissions.permission_group_id)
Role (roles)
├─ belongsTo → Company (roles.company_id)
└─ belongsToMany → Permission (qua role_has_permissions)
EmployeeAccount (employees_account)
├─ belongsToMany → Role (qua model_has_roles)
└─ belongsToMany → Permission (qua model_has_permissions)