Skip to content

Commit aff2abf

Browse files
committed
ISSUE-345: check manage subscribers privilege
1 parent 5c2dc52 commit aff2abf

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

src/Subscription/Controller/SubscriberController.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpList\RestBundle\Subscription\Controller;
66

77
use OpenApi\Attributes as OA;
8+
use PhpList\Core\Domain\Identity\Model\PrivilegeFlag;
89
use PhpList\Core\Domain\Subscription\Model\Subscriber;
910
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberManager;
1011
use PhpList\Core\Security\Authentication;
@@ -89,7 +90,10 @@ public function __construct(
8990
)]
9091
public function createSubscriber(Request $request): JsonResponse
9192
{
92-
$this->requireAuthentication($request);
93+
$admin = $this->requireAuthentication($request);
94+
if (!$admin->getPrivileges()->has(PrivilegeFlag::Subscribers)) {
95+
throw $this->createAccessDeniedException('You are not allowed to create subscribers.');
96+
}
9397

9498
/** @var CreateSubscriberRequest $subscriberRequest */
9599
$subscriberRequest = $this->validator->validate($request, CreateSubscriberRequest::class);
@@ -156,7 +160,10 @@ public function updateSubscriber(
156160
Request $request,
157161
#[MapEntity(mapping: ['subscriberId' => 'id'])] ?Subscriber $subscriber = null,
158162
): JsonResponse {
159-
$this->requireAuthentication($request);
163+
$admin = $this->requireAuthentication($request);
164+
if (!$admin->getPrivileges()->has(PrivilegeFlag::Subscribers)) {
165+
throw $this->createAccessDeniedException('You are not allowed to update subscribers.');
166+
}
160167

161168
if (!$subscriber) {
162169
throw $this->createNotFoundException('Subscriber not found.');
@@ -262,7 +269,10 @@ public function deleteSubscriber(
262269
Request $request,
263270
#[MapEntity(mapping: ['subscriberId' => 'id'])] ?Subscriber $subscriber = null,
264271
): JsonResponse {
265-
$this->requireAuthentication($request);
272+
$admin = $this->requireAuthentication($request);
273+
if (!$admin->getPrivileges()->has(PrivilegeFlag::Subscribers)) {
274+
throw $this->createAccessDeniedException('You are not allowed to delete subscribers.');
275+
}
266276

267277
if (!$subscriber) {
268278
throw $this->createNotFoundException('Subscriber not found.');

src/Subscription/Controller/SubscriberImportController.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Exception;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Identity\Model\PrivilegeFlag;
910
use PhpList\Core\Domain\Subscription\Model\Dto\SubscriberImportOptions;
1011
use PhpList\Core\Domain\Subscription\Service\SubscriberCsvImporter;
1112
use PhpList\Core\Security\Authentication;
@@ -106,7 +107,10 @@ public function __construct(
106107
)]
107108
public function importSubscribers(Request $request): JsonResponse
108109
{
109-
$this->requireAuthentication($request);
110+
$admin = $this->requireAuthentication($request);
111+
if (!$admin->getPrivileges()->has(PrivilegeFlag::Subscribers)) {
112+
throw $this->createAccessDeniedException('You are not allowed to create subscribers.');
113+
}
110114

111115
/** @var UploadedFile|null $file */
112116
$file = $request->files->get('file');
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
id,loginname,email,created,modified,password,passwordchanged,disabled,superuser
2-
1,"john.doe","[email protected]","2017-06-22 15:01:17","2017-06-23 19:50:43","1491a3c7e7b23b9a6393323babbb095dee0d7d81b2199617b487bd0fb5236f3c","2017-06-28",0,1
3-
2,"jane.doe","[email protected]","2017-06-22 15:01:17","2017-06-23 19:50:43","1491a3c7e7b23b9a6393323babbb095dee0d7d81b2199617b487bd0fb5236f3d","2017-06-28",0,1
1+
id,loginname,email,created,modified,password,passwordchanged,disabled,superuser,privileges
2+
1,"john.doe","[email protected]","2017-06-22 15:01:17","2017-06-23 19:50:43","1491a3c7e7b23b9a6393323babbb095dee0d7d81b2199617b487bd0fb5236f3c","2017-06-28",0,1,a:4:{s:11:"subscribers";b:1;s:9:"campaigns";b:1;s:10:"statistics";b:1;s:8:"settings";b:1;}
3+
2,"jane.doe","[email protected]","2017-06-22 15:01:17","2017-06-23 19:50:43","1491a3c7e7b23b9a6393323babbb095dee0d7d81b2199617b487bd0fb5236f3d","2017-06-28",0,1,

tests/Integration/Identity/Fixtures/AdministratorFixture.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public function load(ObjectManager $manager): void
4343
$admin->setPasswordHash($row['password']);
4444
$admin->setDisabled((bool) $row['disabled']);
4545
$admin->setSuperUser((bool) $row['superuser']);
46+
$privileges = unserialize($row['privileges']);
47+
if ($privileges) {
48+
$admin->setPrivilegesFromArray(unserialize($row['privileges']));
49+
}
4650

4751
$manager->persist($admin);
4852

0 commit comments

Comments
 (0)