diff --git a/composer.lock b/composer.lock
index 6de15830..ac7b6165 100644
--- a/composer.lock
+++ b/composer.lock
@@ -7436,16 +7436,16 @@
},
{
"name": "part-db/exchanger",
- "version": "v3.1.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/Part-DB/exchanger.git",
- "reference": "a43fe79a082e331ec2b24f3579e4fba153743757"
+ "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Part-DB/exchanger/zipball/a43fe79a082e331ec2b24f3579e4fba153743757",
- "reference": "a43fe79a082e331ec2b24f3579e4fba153743757",
+ "url": "https://api.github.com/repos/Part-DB/exchanger/zipball/a549f2bd526042f66ad5caa044fd15c67ac5270f",
+ "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f",
"shasum": ""
},
"require": {
@@ -7507,9 +7507,9 @@
"money"
],
"support": {
- "source": "https://github.com/Part-DB/exchanger/tree/v3.1.0"
+ "source": "https://github.com/Part-DB/exchanger/tree/v3.0.0"
},
- "time": "2025-09-05T19:48:23+00:00"
+ "time": "2025-09-05T14:02:04+00:00"
},
{
"name": "part-db/label-fonts",
@@ -7620,20 +7620,19 @@
},
{
"name": "part-db/swap-bundle",
- "version": "v6.1.0",
+ "version": "v6.0.0",
"source": {
"type": "git",
"url": "https://github.com/Part-DB/symfony-swap.git",
- "reference": "fd78ebfbd762b1d76b4d71f713f39add63dec62b"
+ "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Part-DB/symfony-swap/zipball/fd78ebfbd762b1d76b4d71f713f39add63dec62b",
- "reference": "fd78ebfbd762b1d76b4d71f713f39add63dec62b",
+ "url": "https://api.github.com/repos/Part-DB/symfony-swap/zipball/6772eda2603a864b5f0a94224e0cfd79976c7389",
+ "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389",
"shasum": ""
},
"require": {
- "part-db/exchanger": "^3.1.0",
"part-db/swap": "^5.0",
"php": "^7.1.3|^8.0",
"psr/http-client": "^1.0",
@@ -7688,9 +7687,9 @@
"symfony"
],
"support": {
- "source": "https://github.com/Part-DB/symfony-swap/tree/v6.1.0"
+ "source": "https://github.com/Part-DB/symfony-swap/tree/v6.0.0"
},
- "time": "2025-09-05T19:52:56+00:00"
+ "time": "2025-09-05T17:26:07+00:00"
},
{
"name": "php-http/discovery",
diff --git a/config/packages/swap.yaml b/config/packages/swap.yaml
index 4ef8fbdf..02c10f61 100644
--- a/config/packages/swap.yaml
+++ b/config/packages/swap.yaml
@@ -11,6 +11,3 @@ florianv_swap:
fixer: # Fixer.io (needs an API key)
access_key: "%env(string:settings:exchange_rate:fixerApiKey)%"
-
- frankfurter: ~
- fawazahmed_currency_api: ~
diff --git a/docs/installation/installation_guide-debian.md b/docs/installation/installation_guide-debian.md
index b3c61126..312fe21e 100644
--- a/docs/installation/installation_guide-debian.md
+++ b/docs/installation/installation_guide-debian.md
@@ -28,14 +28,9 @@ It is recommended to install Part-DB on a 64-bit system, as the 32-bit version o
For the installation of Part-DB, we need some prerequisites. They can be installed by running the following command:
```bash
-sudo apt update && apt upgrade
-sudo apt install git curl zip ca-certificates software-properties-common \
- apt-transport-https lsb-release nano wget sqlite3
+sudo apt install git curl zip ca-certificates software-properties-common apt-transport-https lsb-release nano wget
```
-Please run `sqlite3 --version` to assert that the SQLite version is 3.35 or higher.
-Otherwise some database migrations will not succeed.
-
### Install PHP and apache2
Part-DB is written in [PHP](https://php.net) and therefore needs a PHP interpreter to run. Part-DB needs PHP 8.2 or
diff --git a/src/DataFixtures/CurrencyFixtures.php b/src/DataFixtures/CurrencyFixtures.php
deleted file mode 100644
index 2de5b277..00000000
--- a/src/DataFixtures/CurrencyFixtures.php
+++ /dev/null
@@ -1,64 +0,0 @@
-.
- */
-
-declare(strict_types=1);
-
-
-namespace App\DataFixtures;
-
-use App\Entity\PriceInformations\Currency;
-use Brick\Math\BigDecimal;
-use Doctrine\Bundle\FixturesBundle\Fixture;
-use Doctrine\Persistence\ObjectManager;
-
-class CurrencyFixtures extends Fixture
-{
- public function load(ObjectManager $manager): void
- {
- $currency1 = new Currency();
- $currency1->setName('US-Dollar');
- $currency1->setIsoCode('USD');
- $manager->persist($currency1);
-
- $currency2 = new Currency();
- $currency2->setName('Swiss Franc');
- $currency2->setIsoCode('CHF');
- $currency2->setExchangeRate(BigDecimal::of('0.91'));
- $manager->persist($currency2);
-
- $currency3 = new Currency();
- $currency3->setName('Great British Pound');
- $currency3->setIsoCode('GBP');
- $currency3->setExchangeRate(BigDecimal::of('0.78'));
- $manager->persist($currency3);
-
- $currency7 = new Currency();
- $currency7->setName('Test Currency with long name');
- $currency7->setIsoCode('CNY');
- $manager->persist($currency7);
-
- $manager->flush();
-
-
- //Ensure that currency 7 gets ID 7
- $manager->getRepository(Currency::class)->changeID($currency7, 7);
- $manager->flush();
- }
-}
diff --git a/src/Security/Voter/AttachmentVoter.php b/src/Security/Voter/AttachmentVoter.php
index bd7ae4df..c2b17053 100644
--- a/src/Security/Voter/AttachmentVoter.php
+++ b/src/Security/Voter/AttachmentVoter.php
@@ -41,7 +41,6 @@ use App\Entity\Attachments\UserAttachment;
use RuntimeException;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use function in_array;
@@ -57,7 +56,7 @@ final class AttachmentVoter extends Voter
{
}
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
//This voter only works for attachments
@@ -66,8 +65,7 @@ final class AttachmentVoter extends Voter
}
if ($attribute === 'show_private') {
- $vote?->addReason('User is not allowed to view private attachments.');
- return $this->helper->isGranted($token, 'attachments', 'show_private', $vote);
+ return $this->helper->isGranted($token, 'attachments', 'show_private');
}
@@ -113,8 +111,7 @@ final class AttachmentVoter extends Voter
throw new RuntimeException('Encountered unknown Parameter type: ' . $subject);
}
- $vote?->addReason('User is not allowed to '.$this->mapOperation($attribute).' attachments of type '.$param.'.');
- return $this->helper->isGranted($token, $param, $this->mapOperation($attribute), $vote);
+ return $this->helper->isGranted($token, $param, $this->mapOperation($attribute));
}
return false;
diff --git a/src/Security/Voter/GroupVoter.php b/src/Security/Voter/GroupVoter.php
index f2ce6953..34839d38 100644
--- a/src/Security/Voter/GroupVoter.php
+++ b/src/Security/Voter/GroupVoter.php
@@ -25,7 +25,6 @@ namespace App\Security\Voter;
use App\Entity\UserSystem\Group;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -44,9 +43,9 @@ final class GroupVoter extends Voter
*
* @param string $attribute
*/
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
- return $this->helper->isGranted($token, 'groups', $attribute, $vote);
+ return $this->helper->isGranted($token, 'groups', $attribute);
}
/**
diff --git a/src/Security/Voter/ImpersonateUserVoter.php b/src/Security/Voter/ImpersonateUserVoter.php
index 1f8a70c6..edf55c62 100644
--- a/src/Security/Voter/ImpersonateUserVoter.php
+++ b/src/Security/Voter/ImpersonateUserVoter.php
@@ -26,7 +26,6 @@ namespace App\Security\Voter;
use App\Entity\UserSystem\User;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
@@ -48,16 +47,9 @@ final class ImpersonateUserVoter extends Voter
&& $subject instanceof UserInterface;
}
- protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
- $result = $this->helper->isGranted($token, 'users', 'impersonate');
-
- if ($result === false) {
- $vote?->addReason('User is not allowed to impersonate other users.');
- $this->helper->addReason($vote, 'users', 'impersonate');
- }
-
- return $result;
+ return $this->helper->isGranted($token, 'users', 'impersonate');
}
public function supportsAttribute(string $attribute): bool
@@ -69,4 +61,4 @@ final class ImpersonateUserVoter extends Voter
{
return is_a($subjectType, User::class, true);
}
-}
+}
\ No newline at end of file
diff --git a/src/Security/Voter/LabelProfileVoter.php b/src/Security/Voter/LabelProfileVoter.php
index cd349ddb..47505bf9 100644
--- a/src/Security/Voter/LabelProfileVoter.php
+++ b/src/Security/Voter/LabelProfileVoter.php
@@ -44,7 +44,6 @@ namespace App\Security\Voter;
use App\Entity\LabelSystem\LabelProfile;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -64,9 +63,9 @@ final class LabelProfileVoter extends Voter
public function __construct(private readonly VoterHelper $helper)
{}
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
- return $this->helper->isGranted($token, 'labels', self::MAPPING[$attribute], $vote);
+ return $this->helper->isGranted($token, 'labels', self::MAPPING[$attribute]);
}
protected function supports($attribute, $subject): bool
diff --git a/src/Security/Voter/LogEntryVoter.php b/src/Security/Voter/LogEntryVoter.php
index dcb75a7a..08bc3b70 100644
--- a/src/Security/Voter/LogEntryVoter.php
+++ b/src/Security/Voter/LogEntryVoter.php
@@ -26,7 +26,6 @@ use App\Services\UserSystem\VoterHelper;
use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\LogSystem\AbstractLogEntry;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -40,7 +39,7 @@ final class LogEntryVoter extends Voter
{
}
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $this->helper->resolveUser($token);
@@ -49,19 +48,19 @@ final class LogEntryVoter extends Voter
}
if ('delete' === $attribute) {
- return $this->helper->isGranted($token, 'system', 'delete_logs', $vote);
+ return $this->helper->isGranted($token, 'system', 'delete_logs');
}
if ('read' === $attribute) {
//Allow read of the users own log entries
if (
$subject->getUser() === $user
- && $this->helper->isGranted($token, 'self', 'show_logs', $vote)
+ && $this->helper->isGranted($token, 'self', 'show_logs')
) {
return true;
}
- return $this->helper->isGranted($token, 'system', 'show_logs', $vote);
+ return $this->helper->isGranted($token, 'system', 'show_logs');
}
if ('show_details' === $attribute) {
diff --git a/src/Security/Voter/OrderdetailVoter.php b/src/Security/Voter/OrderdetailVoter.php
index 3bb2a3a3..20843b9a 100644
--- a/src/Security/Voter/OrderdetailVoter.php
+++ b/src/Security/Voter/OrderdetailVoter.php
@@ -46,7 +46,6 @@ use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\Parts\Part;
use App\Entity\PriceInformations\Orderdetail;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -60,7 +59,7 @@ final class OrderdetailVoter extends Voter
protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element'];
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
if (! is_a($subject, Orderdetail::class, true)) {
throw new \RuntimeException('This voter can only handle Orderdetail objects!');
@@ -76,7 +75,7 @@ final class OrderdetailVoter extends Voter
//If we have no part associated use the generic part permission
if (is_string($subject) || !$subject->getPart() instanceof Part) {
- return $this->helper->isGranted($token, 'parts', $operation, $vote);
+ return $this->helper->isGranted($token, 'parts', $operation);
}
//Otherwise vote on the part
diff --git a/src/Security/Voter/ParameterVoter.php b/src/Security/Voter/ParameterVoter.php
index f59bdeaf..8ee2b9f5 100644
--- a/src/Security/Voter/ParameterVoter.php
+++ b/src/Security/Voter/ParameterVoter.php
@@ -39,7 +39,6 @@ use App\Entity\Parameters\StorageLocationParameter;
use App\Entity\Parameters\SupplierParameter;
use RuntimeException;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -54,7 +53,7 @@ final class ParameterVoter extends Voter
{
}
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
//return $this->resolver->inherit($user, 'attachments', $attribute) ?? false;
@@ -109,7 +108,7 @@ final class ParameterVoter extends Voter
throw new RuntimeException('Encountered unknown Parameter type: ' . (is_object($subject) ? $subject::class : $subject));
}
- return $this->helper->isGranted($token, $param, $attribute, $vote);
+ return $this->helper->isGranted($token, $param, $attribute);
}
protected function supports(string $attribute, $subject): bool
diff --git a/src/Security/Voter/PartAssociationVoter.php b/src/Security/Voter/PartAssociationVoter.php
index f1eb83c7..7678b67a 100644
--- a/src/Security/Voter/PartAssociationVoter.php
+++ b/src/Security/Voter/PartAssociationVoter.php
@@ -46,7 +46,6 @@ use App\Services\UserSystem\VoterHelper;
use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\Parts\Part;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -62,7 +61,7 @@ final class PartAssociationVoter extends Voter
protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element'];
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
if (!is_string($subject) && !$subject instanceof PartAssociation) {
throw new \RuntimeException('Invalid subject type!');
@@ -78,7 +77,7 @@ final class PartAssociationVoter extends Voter
//If we have no part associated use the generic part permission
if (is_string($subject) || !$subject->getOwner() instanceof Part) {
- return $this->helper->isGranted($token, 'parts', $operation, $vote);
+ return $this->helper->isGranted($token, 'parts', $operation);
}
//Otherwise vote on the part
diff --git a/src/Security/Voter/PartLotVoter.php b/src/Security/Voter/PartLotVoter.php
index 87c3d135..a64473c8 100644
--- a/src/Security/Voter/PartLotVoter.php
+++ b/src/Security/Voter/PartLotVoter.php
@@ -46,7 +46,6 @@ use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\Parts\Part;
use App\Entity\Parts\PartLot;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -60,13 +59,13 @@ final class PartLotVoter extends Voter
protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element', 'withdraw', 'add', 'move'];
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $this->helper->resolveUser($token);
if (in_array($attribute, ['withdraw', 'add', 'move'], true))
{
- $base_permission = $this->helper->isGranted($token, 'parts_stock', $attribute, $vote);
+ $base_permission = $this->helper->isGranted($token, 'parts_stock', $attribute);
$lot_permission = true;
//If the lot has an owner, we need to check if the user is the owner of the lot to be allowed to withdraw it.
@@ -74,10 +73,6 @@ final class PartLotVoter extends Voter
$lot_permission = $subject->getOwner() === $user || $subject->getOwner()->getID() === $user->getID();
}
- if (!$lot_permission) {
- $vote->addReason('User is not the owner of the lot.');
- }
-
return $base_permission && $lot_permission;
}
@@ -91,7 +86,7 @@ final class PartLotVoter extends Voter
//If we have no part associated use the generic part permission
if (is_string($subject) || !$subject->getPart() instanceof Part) {
- return $this->helper->isGranted($token, 'parts', $operation, $vote);
+ return $this->helper->isGranted($token, 'parts', $operation);
}
//Otherwise vote on the part
diff --git a/src/Security/Voter/PartVoter.php b/src/Security/Voter/PartVoter.php
index 159e6893..ef70b6ce 100644
--- a/src/Security/Voter/PartVoter.php
+++ b/src/Security/Voter/PartVoter.php
@@ -25,7 +25,6 @@ namespace App\Security\Voter;
use App\Entity\Parts\Part;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -53,9 +52,10 @@ final class PartVoter extends Voter
return false;
}
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
- return $this->helper->isGranted($token, 'parts', $attribute, $vote);
+ //Null concealing operator means, that no
+ return $this->helper->isGranted($token, 'parts', $attribute);
}
public function supportsAttribute(string $attribute): bool
diff --git a/src/Security/Voter/PermissionVoter.php b/src/Security/Voter/PermissionVoter.php
index 8c304d86..c6ec1b3d 100644
--- a/src/Security/Voter/PermissionVoter.php
+++ b/src/Security/Voter/PermissionVoter.php
@@ -24,7 +24,6 @@ namespace App\Security\Voter;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -40,17 +39,12 @@ final class PermissionVoter extends Voter
}
- protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
$attribute = ltrim($attribute, '@');
[$perm, $op] = explode('.', $attribute);
- $result = $this->helper->isGranted($token, $perm, $op);
- if ($result === false) {
- $this->helper->addReason($vote, $perm, $op);
- }
-
- return $result;
+ return $this->helper->isGranted($token, $perm, $op);
}
public function supportsAttribute(string $attribute): bool
diff --git a/src/Security/Voter/PricedetailVoter.php b/src/Security/Voter/PricedetailVoter.php
index ca86f1ce..681b73b7 100644
--- a/src/Security/Voter/PricedetailVoter.php
+++ b/src/Security/Voter/PricedetailVoter.php
@@ -47,7 +47,6 @@ use App\Entity\PriceInformations\Orderdetail;
use App\Entity\Parts\Part;
use App\Entity\PriceInformations\Pricedetail;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
/**
@@ -61,7 +60,7 @@ final class PricedetailVoter extends Voter
protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element'];
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$operation = match ($attribute) {
'read' => 'read',
@@ -73,7 +72,7 @@ final class PricedetailVoter extends Voter
//If we have no part associated use the generic part permission
if (is_string($subject) || !$subject->getOrderdetail() instanceof Orderdetail || !$subject->getOrderdetail()->getPart() instanceof Part) {
- return $this->helper->isGranted($token, 'parts', $operation, $vote);
+ return $this->helper->isGranted($token, 'parts', $operation);
}
//Otherwise vote on the part
diff --git a/src/Security/Voter/StructureVoter.php b/src/Security/Voter/StructureVoter.php
index ad0299a7..2417b796 100644
--- a/src/Security/Voter/StructureVoter.php
+++ b/src/Security/Voter/StructureVoter.php
@@ -33,7 +33,6 @@ use App\Entity\Parts\Supplier;
use App\Entity\PriceInformations\Currency;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use function is_object;
@@ -114,10 +113,10 @@ final class StructureVoter extends Voter
*
* @param string $attribute
*/
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$permission_name = $this->instanceToPermissionName($subject);
//Just resolve the permission
- return $this->helper->isGranted($token, $permission_name, $attribute, $vote);
+ return $this->helper->isGranted($token, $permission_name, $attribute);
}
}
diff --git a/src/Security/Voter/UserVoter.php b/src/Security/Voter/UserVoter.php
index 97f8e4fb..b41c1a40 100644
--- a/src/Security/Voter/UserVoter.php
+++ b/src/Security/Voter/UserVoter.php
@@ -26,7 +26,6 @@ use App\Entity\UserSystem\User;
use App\Services\UserSystem\PermissionManager;
use App\Services\UserSystem\VoterHelper;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use function in_array;
@@ -80,7 +79,7 @@ final class UserVoter extends Voter
*
* @param string $attribute
*/
- protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool
+ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $this->helper->resolveUser($token);
@@ -98,7 +97,7 @@ final class UserVoter extends Voter
if (($subject instanceof User) && $subject->getID() === $user->getID() &&
$this->helper->isValidOperation('self', $attribute)) {
//Then we also need to check the self permission
- $tmp = $this->helper->isGranted($token, 'self', $attribute, $vote);
+ $tmp = $this->helper->isGranted($token, 'self', $attribute);
//But if the self value is not allowed then use just the user value:
if ($tmp) {
return $tmp;
@@ -107,7 +106,7 @@ final class UserVoter extends Voter
//Else just check user permission:
if ($this->helper->isValidOperation('users', $attribute)) {
- return $this->helper->isGranted($token, 'users', $attribute, $vote);
+ return $this->helper->isGranted($token, 'users', $attribute);
}
return false;
diff --git a/src/Services/UserSystem/VoterHelper.php b/src/Services/UserSystem/VoterHelper.php
index d3c5368c..644351f4 100644
--- a/src/Services/UserSystem/VoterHelper.php
+++ b/src/Services/UserSystem/VoterHelper.php
@@ -28,9 +28,6 @@ use App\Repository\UserRepository;
use App\Security\ApiTokenAuthenticatedToken;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
-use Symfony\Component\Security\Core\Authorization\Voter\Vote;
-use Symfony\Component\Security\Core\Authorization\Voter\Voter;
-use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @see \App\Tests\Services\UserSystem\VoterHelperTest
@@ -38,14 +35,10 @@ use Symfony\Contracts\Translation\TranslatorInterface;
final class VoterHelper
{
private readonly UserRepository $userRepository;
- private readonly array $permissionStructure;
- public function __construct(private readonly PermissionManager $permissionManager,
- private readonly TranslatorInterface $translator,
- private readonly EntityManagerInterface $entityManager)
+ public function __construct(private readonly PermissionManager $permissionManager, private readonly EntityManagerInterface $entityManager)
{
$this->userRepository = $this->entityManager->getRepository(User::class);
- $this->permissionStructure = $this->permissionManager->getPermissionStructure();
}
/**
@@ -54,16 +47,11 @@ final class VoterHelper
* @param TokenInterface $token The token to check
* @param string $permission The permission to check
* @param string $operation The operation to check
- * @param Vote|null $vote The vote object to add reasons to (optional). If null, no reasons are added.
* @return bool
*/
- public function isGranted(TokenInterface $token, string $permission, string $operation, ?Vote $vote = null): bool
+ public function isGranted(TokenInterface $token, string $permission, string $operation): bool
{
- $tmp = $this->isGrantedTrinary($token, $permission, $operation) ?? false;
- if ($tmp === false) {
- $this->addReason($vote, $permission, $operation);
- }
- return $tmp;
+ return $this->isGrantedTrinary($token, $permission, $operation) ?? false;
}
/**
@@ -136,17 +124,4 @@ final class VoterHelper
{
return $this->permissionManager->isValidOperation($permission, $operation);
}
-
- public function addReason(?Vote $voter, string $permission, $operation): void
- {
- if ($voter !== null) {
- $voter->addReason(sprintf("User does not have permission %s -> %s -> %s (%s.%s).",
- $this->translator->trans('perm.group.'.($this->permissionStructure['perms'][$permission]['group'] ?? 'unknown') ),
- $this->translator->trans($this->permissionStructure['perms'][$permission]['label'] ?? $permission),
- $this->translator->trans($this->permissionStructure['perms'][$permission]['operations'][$operation]['label'] ?? $operation),
- $permission,
- $operation
- ));
- }
- }
-}
+}
\ No newline at end of file
diff --git a/templates/bundles/TwigBundle/Exception/error403.html.twig b/templates/bundles/TwigBundle/Exception/error403.html.twig
index 334670fc..f5987179 100644
--- a/templates/bundles/TwigBundle/Exception/error403.html.twig
+++ b/templates/bundles/TwigBundle/Exception/error403.html.twig
@@ -1,9 +1,6 @@
{% extends "bundles/TwigBundle/Exception/error.html.twig" %}
{% block status_comment %}
- Nice try! But you are not allowed to do this!
- {{ exception.message }}
+ Nice try! But you are not allowed to do this!
If you think you should have access to this ressource, contact the adminstrator.
-
-
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/templates/info_providers/providers.macro.html.twig b/templates/info_providers/providers.macro.html.twig
index bf530ebd..827a95fd 100644
--- a/templates/info_providers/providers.macro.html.twig
+++ b/templates/info_providers/providers.macro.html.twig
@@ -23,7 +23,7 @@