fix: don't enforce required checks on users with administrative roles

This commit is contained in:
Björn Fromme
2026-03-15 12:42:28 +01:00
parent 3d71dcfc14
commit 90dda38c0f
6 changed files with 62 additions and 17 deletions
@@ -55,7 +55,8 @@ class IndexController extends AbstractController
// Validate teamer data to show missing data right away
$errors = $this->validator->validate($teamer, null, ['profile_preflight']);
$verificationMode = false === $this->personalDataVerificationRequiredCheck->isSatisfied($user);
$verificationMode = true === $this->personalDataVerificationRequiredCheck->appliesTo($user)
&& false === $this->personalDataVerificationRequiredCheck->isSatisfied($user);
$form = $this->createForm(TeamerProfileType::class, $teamer, [
'upload_session' => $uploadSession,
@@ -0,0 +1,23 @@
<?php
namespace App\RequiredTeamerCheck;
use App\Entity\User;
abstract class AbstractRequiredTeamerCheck implements RequiredTeamerCheckInterface
{
private const EXCLUDED_ROLES = [
'ROLE_ADMIN',
'ROLE_MANAGER',
'ROLE_HOUSE_MANAGER',
];
public function appliesTo(User $user): bool
{
if (0 < count(array_intersect($user->getRoles(), self::EXCLUDED_ROLES))) {
return false;
}
return true === $user->hasRole('ROLE_TEAMER');
}
}
@@ -5,20 +5,14 @@ namespace App\RequiredTeamerCheck;
use App\Entity\Teamer;
use App\Entity\Upload;
use App\Entity\User;
use App\RequiredTeamerCheck\RequiredTeamerCheckInterface;
class DriverLicenseRequiredCheck implements RequiredTeamerCheckInterface
class DriverLicenseRequiredCheck extends AbstractRequiredTeamerCheck
{
public function getCode(): string
{
return 'driver_license';
}
public function appliesTo(User $user): bool
{
return true === $user->hasRole('ROLE_TEAMER');
}
public function isSatisfied(User $user): bool
{
$teamer = $user->getTeamer();
@@ -6,7 +6,7 @@ use App\Entity\Teamer;
use App\Entity\User;
use Carbon\CarbonImmutable;
class PersonalDataVerificationRequiredCheck implements RequiredTeamerCheckInterface
class PersonalDataVerificationRequiredCheck extends AbstractRequiredTeamerCheck
{
public function __construct(
private readonly array $dataVerificationDeadlines = ['04-01', '10-01'],
@@ -18,11 +18,6 @@ class PersonalDataVerificationRequiredCheck implements RequiredTeamerCheckInterf
return 'personal_data_verification';
}
public function appliesTo(User $user): bool
{
return true === $user->hasRole('ROLE_TEAMER');
}
public function isSatisfied(User $user): bool
{
$teamer = $user->getTeamer();
@@ -20,12 +20,24 @@ class DriverLicenseRequiredCheckTest extends TestCase
}
public function testAppliesToMixedRoleUsersWithTeamerRole(): void
/**
* @dataProvider mixedRoleProvider
*/
public function testDoesNotApplyToExcludedMixedRoleUsersWithTeamerRole(string $excludedRole): void
{
$user = $this->createTeamerUser();
$user->setRoles(['ROLE_ADMIN', 'ROLE_TEAMER']);
$user->setRoles([$excludedRole, 'ROLE_TEAMER']);
$this->assertTrue($this->check->appliesTo($user));
$this->assertFalse($this->check->appliesTo($user));
}
public function mixedRoleProvider(): array
{
return [
['ROLE_ADMIN'],
['ROLE_MANAGER'],
['ROLE_HOUSE_MANAGER'],
];
}
public function testIsNotSatisfiedWhenDeclarationIsMissing(): void
@@ -30,6 +30,26 @@ class PersonalDataVerificationRequiredCheckTest extends TestCase
$this->assertTrue($check->appliesTo($user));
}
/**
* @dataProvider mixedRoleProvider
*/
public function testDoesNotApplyToExcludedMixedRoleUsersWithTeamerRole(string $excludedRole): void
{
$check = new PersonalDataVerificationRequiredCheck();
$user = (new User())->setRoles([$excludedRole, 'ROLE_TEAMER']);
$this->assertFalse($check->appliesTo($user));
}
public function mixedRoleProvider(): array
{
return [
['ROLE_ADMIN'],
['ROLE_MANAGER'],
['ROLE_HOUSE_MANAGER'],
];
}
public function testIsNotSatisfiedWhenTeamerIsMissing(): void
{
$check = new PersonalDataVerificationRequiredCheck();