isSuperAdmin()) { return true; } // 슈퍼 관리자 대상은 슈퍼 관리자 액터만 수정 가능 return $actor->isSuperAdmin(); } /** * 액터가 대상을 수정할 수 없으면 예외를 던집니다. * * @param User $target 수정 대상 사용자 * @param User|null $actor 행위자(미지정 시 현재 인증 사용자) * * @throws CannotModifySuperAdminException 상한 위반 시 */ public static function assertActorMayModify(User $target, ?User $actor = null): void { if (! self::mayModify($target, $actor)) { throw new CannotModifySuperAdminException; } } /** * 액터가 수정 가능한 대상만 남긴 배열을 반환합니다(일괄 작업용). * * @param iterable $targets 대상 사용자 목록 * @param User|null $actor 행위자(미지정 시 현재 인증 사용자) * @return array 수정 가능한 대상 목록 */ public static function filterModifiable(iterable $targets, ?User $actor = null): array { $actor ??= Auth::user(); $allowed = []; foreach ($targets as $target) { if (self::mayModify($target, $actor)) { $allowed[] = $target; } } return $allowed; } }