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
|
// Validate teamer data to show missing data right away
|
||||||
$errors = $this->validator->validate($teamer, null, ['profile_preflight']);
|
$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, [
|
$form = $this->createForm(TeamerProfileType::class, $teamer, [
|
||||||
'upload_session' => $uploadSession,
|
'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\Teamer;
|
||||||
use App\Entity\Upload;
|
use App\Entity\Upload;
|
||||||
use App\Entity\User;
|
use App\Entity\User;
|
||||||
use App\RequiredTeamerCheck\RequiredTeamerCheckInterface;
|
|
||||||
|
|
||||||
class DriverLicenseRequiredCheck implements RequiredTeamerCheckInterface
|
class DriverLicenseRequiredCheck extends AbstractRequiredTeamerCheck
|
||||||
{
|
{
|
||||||
public function getCode(): string
|
public function getCode(): string
|
||||||
{
|
{
|
||||||
return 'driver_license';
|
return 'driver_license';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function appliesTo(User $user): bool
|
|
||||||
{
|
|
||||||
return true === $user->hasRole('ROLE_TEAMER');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isSatisfied(User $user): bool
|
public function isSatisfied(User $user): bool
|
||||||
{
|
{
|
||||||
$teamer = $user->getTeamer();
|
$teamer = $user->getTeamer();
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use App\Entity\Teamer;
|
|||||||
use App\Entity\User;
|
use App\Entity\User;
|
||||||
use Carbon\CarbonImmutable;
|
use Carbon\CarbonImmutable;
|
||||||
|
|
||||||
class PersonalDataVerificationRequiredCheck implements RequiredTeamerCheckInterface
|
class PersonalDataVerificationRequiredCheck extends AbstractRequiredTeamerCheck
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly array $dataVerificationDeadlines = ['04-01', '10-01'],
|
private readonly array $dataVerificationDeadlines = ['04-01', '10-01'],
|
||||||
@@ -18,11 +18,6 @@ class PersonalDataVerificationRequiredCheck implements RequiredTeamerCheckInterf
|
|||||||
return 'personal_data_verification';
|
return 'personal_data_verification';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function appliesTo(User $user): bool
|
|
||||||
{
|
|
||||||
return true === $user->hasRole('ROLE_TEAMER');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isSatisfied(User $user): bool
|
public function isSatisfied(User $user): bool
|
||||||
{
|
{
|
||||||
$teamer = $user->getTeamer();
|
$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 = $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
|
public function testIsNotSatisfiedWhenDeclarationIsMissing(): void
|
||||||
|
|||||||
@@ -30,6 +30,26 @@ class PersonalDataVerificationRequiredCheckTest extends TestCase
|
|||||||
$this->assertTrue($check->appliesTo($user));
|
$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
|
public function testIsNotSatisfiedWhenTeamerIsMissing(): void
|
||||||
{
|
{
|
||||||
$check = new PersonalDataVerificationRequiredCheck();
|
$check = new PersonalDataVerificationRequiredCheck();
|
||||||
|
|||||||
Reference in New Issue
Block a user