$groupIds List of group IDs the principal belongs to * @param self|null $impersonatedBy Optional parent context when impersonation is active */ public function __construct( public PrincipalRole $role, public int $id, public array $groupIds = [], public ?self $impersonatedBy = null, ) {} }