66
77use Doctrine \ORM \EntityManagerInterface ;
88use OpenApi \Attributes as OA ;
9+ use PhpList \Core \Domain \Identity \Model \Administrator ;
910use PhpList \Core \Domain \Subscription \Model \SubscriberList ;
1011use PhpList \Core \Domain \Subscription \Service \Manager \SubscriptionManager ;
1112use PhpList \Core \Security \Authentication ;
@@ -122,12 +123,14 @@ public function createSubscription(
122123 Request $ request ,
123124 #[MapEntity(mapping: ['listId ' => 'id ' ])] ?SubscriberList $ list = null ,
124125 ): JsonResponse {
125- $ this ->requireAuthentication ($ request );
126+ $ authUser = $ this ->requireAuthentication ($ request );
126127
127128 if (!$ list ) {
128129 throw $ this ->createNotFoundException ('Subscriber list not found. ' );
129130 }
130131
132+ $ this ->denyAccessUnlessOwner ($ list , $ authUser );
133+
131134 /** @var SubscriptionRequest $subscriptionRequest */
132135 $ subscriptionRequest = $ this ->validator ->validate ($ request , SubscriptionRequest::class);
133136 $ subscriptions = $ this ->subscriptionManager ->createSubscriptions ($ list , $ subscriptionRequest ->emails );
@@ -188,10 +191,13 @@ public function deleteSubscriptions(
188191 Request $ request ,
189192 #[MapEntity(mapping: ['listId ' => 'id ' ])] ?SubscriberList $ list = null ,
190193 ): JsonResponse {
191- $ this ->requireAuthentication ($ request );
194+ $ authUser = $ this ->requireAuthentication ($ request );
192195 if (!$ list ) {
193196 throw $ this ->createNotFoundException ('Subscriber list not found. ' );
194197 }
198+
199+ $ this ->denyAccessUnlessOwner ($ list , $ authUser );
200+
195201 $ subscriptionRequest = new SubscriptionRequest ();
196202 $ subscriptionRequest ->emails = $ request ->query ->all ('emails ' );
197203
@@ -202,4 +208,17 @@ public function deleteSubscriptions(
202208
203209 return $ this ->json (null , Response::HTTP_NO_CONTENT );
204210 }
211+
212+ private function denyAccessUnlessOwner (SubscriberList $ list , Administrator $ user ): void
213+ {
214+ if ($ list ->getOwner () === null ) {
215+ return ;
216+ }
217+
218+ if ($ list ->getOwner ()->getId () === $ user ->getId ()) {
219+ return ;
220+ }
221+
222+ throw $ this ->createAccessDeniedException ('Access denied. ' );
223+ }
205224}
0 commit comments