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ệ:

Accessors:

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)
← Cài đặt & Cấu hình Migrations →