fix: don't enforce required checks on users with administrative roles
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user