Release 2.13 (#4659)

This commit is contained in:
Kevin Papst
2024-03-10 15:35:59 +01:00
committed by GitHub
parent a78e8ed8c4
commit dee90bb15e
79 changed files with 1019 additions and 932 deletions

View File

@@ -35,21 +35,23 @@ final class ActivityVoter extends Voter
'permissions',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, Activity::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof Activity)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof Activity && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
@@ -65,7 +67,7 @@ final class ActivityVoter extends Voter
}
// those cannot be assigned to teams
if (\in_array($attribute, ['create', 'delete'])) {
if (\in_array($attribute, ['create', 'delete'], true)) {
return false;
}

View File

@@ -39,21 +39,23 @@ final class CustomerVoter extends Voter
'access',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, Customer::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof Customer)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof Customer && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -38,17 +38,22 @@ final class EntityMultiRoleVoter extends Voter
'activity',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
if (!$this->supportsAttribute($attribute)) {
return false;
}
if (\is_string($subject) && \in_array($subject, self::ALLOWED_SUBJECTS)) {
if (\is_string($subject) && \in_array($subject, self::ALLOWED_SUBJECTS, true)) {
return true;
}
@@ -69,7 +74,7 @@ final class EntityMultiRoleVoter extends Voter
$suffix = null;
if (\is_string($subject) && \in_array($subject, self::ALLOWED_SUBJECTS)) {
if (\is_string($subject) && \in_array($subject, self::ALLOWED_SUBJECTS, true)) {
$suffix = $subject;
} elseif ($subject instanceof Activity) {
$suffix = 'activity';

View File

@@ -37,21 +37,23 @@ final class ProjectVoter extends Voter
'details',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, Project::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof Project)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof Project && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -20,13 +20,21 @@ use Symfony\Component\Security\Core\Authorization\Voter\Voter;
*/
final class QuickEntryVoter extends Voter
{
public function __construct(private RolePermissionManager $permissionManager, private TrackingModeService $trackingModeService)
public function __construct(
private readonly RolePermissionManager $permissionManager,
private readonly TrackingModeService $trackingModeService
)
{
}
public function supportsAttribute(string $attribute): bool
{
return 'quick-entry' === $attribute;
}
protected function supports(string $attribute, mixed $subject): bool
{
return 'quick-entry' === $attribute;
return $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -26,13 +26,23 @@ final class ReportingVoter extends Voter
'report:user',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return $subjectType === 'null';
}
protected function supports(string $attribute, mixed $subject): bool
{
return $subject === null && \in_array($attribute, self::ALLOWED_ATTRIBUTES);
return $subject === null && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -21,18 +21,24 @@ use Symfony\Component\Security\Core\Authorization\Voter\Voter;
*/
final class RolePermissionVoter extends Voter
{
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return $this->permissionManager->isRegisteredPermission($attribute);
}
public function supportsType(string $subjectType): bool
{
// we only work on single strings that have no subject
return $subjectType === 'null';
}
protected function supports(string $attribute, mixed $subject): bool
{
// we only work on single strings that have no subject
if (null !== $subject) {
return false;
}
return $this->permissionManager->isRegisteredPermission($attribute);
return $subject === null && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -29,21 +29,23 @@ final class TeamVoter extends Voter
'delete',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, Team::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof Team)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof Team && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -11,6 +11,7 @@ namespace App\Voter;
use App\Entity\Timesheet;
use App\Entity\User;
use App\Form\Model\MultiUserTimesheet;
use App\Security\RolePermissionManager;
use App\Timesheet\LockdownService;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
@@ -55,21 +56,26 @@ final class TimesheetVoter extends Voter
private ?bool $editExported = null;
private ?\DateTime $now = null;
public function __construct(private RolePermissionManager $permissionManager, private LockdownService $lockdownService)
public function __construct(
private readonly RolePermissionManager $permissionManager,
private readonly LockdownService $lockdownService
)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, Timesheet::class) || str_contains($subjectType, MultiUserTimesheet::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof Timesheet)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof Timesheet && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool

View File

@@ -38,21 +38,23 @@ final class UserVoter extends Voter
'supervisor',
];
public function __construct(private RolePermissionManager $permissionManager)
public function __construct(private readonly RolePermissionManager $permissionManager)
{
}
public function supportsAttribute(string $attribute): bool
{
return \in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
public function supportsType(string $subjectType): bool
{
return str_contains($subjectType, User::class);
}
protected function supports(string $attribute, mixed $subject): bool
{
if (!($subject instanceof User)) {
return false;
}
if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) {
return false;
}
return true;
return $subject instanceof User && $this->supportsAttribute($attribute);
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool