Quellcode durchsuchen

complete security doc and minor fixes

Olivier Massot vor 2 Jahren
Ursprung
Commit
889f812913
3 geänderte Dateien mit 23 neuen und 11 gelöschten Zeilen
  1. 15 3
      doc/security.md
  2. 1 1
      src/Security/Voter/AbstractVoter.php
  3. 7 7
      src/Security/Voter/Core/FileVoter.php

+ 15 - 3
doc/security.md

@@ -164,9 +164,21 @@ Le client est autorisé à consulter l'enregistrement si l'une de ces conditions
 * visibilité est 'EVERYBODY' 
 * requête interne
 * est connecté et fait partie des AccessPersons du fichier
-* est connecté et fichier a des accessRoles et user a un des roles présents dans accessRoles et fichier appartient à l'organisation à laquelle l'utilisateur appartient
-* est connecté et fichier a des accessRoles et user a un des roles présents dans accessRoles et fichier appartient à l'utilisateur
-=> TODO: trois dernières conditions à revoir
+* est connecté et est le propriétaire du fichier
+* est connecté et a le rôle ROLE_FILE et fichier appartient à l'utilisateur ou à son organisation
+* est connecté et fichier a des accessRoles et user a un des roles présents dans accessRoles et fichier appartient à l'utilisateur ou à son organisation (deprecated)
+
 
 Est autorisé à éditer si :
 
+* pas de date de disponibilité ou date de disponibilité antérieure à Now
+* est connecté et a le rôle ROLE_FILE et fichier appartient à l'utilisateur ou à son organisation
+* est connecté et est le propriétaire du fichier
+
+Est autorisé à créer si :
+
+* est connecté
+
+Est autorisé à supprimer si :
+
+* est connecté et est autorisé à éditer

+ 1 - 1
src/Security/Voter/AbstractVoter.php

@@ -43,7 +43,7 @@ abstract class AbstractVoter extends Voter
 
     /**
      * List of supported operations. Override it to restrict.
-     * @var array|string[]
+     * @var array<string>
      */
     protected static array $allowedOperations = [
         self::READ, self::EDIT, self::CREATE, self::DELETE

+ 7 - 7
src/Security/Voter/Core/FileVoter.php

@@ -28,7 +28,7 @@ class FileVoter extends AbstractVoter
      * @param $subject File
      * @return boolean
      */
-    public function canView(object $subject): bool
+    protected function canView(object $subject): bool
     {
         // Le fichier n'est pas encore disponible
         if(!$this->isAvailable($subject, $this->getUser())) {
@@ -86,7 +86,7 @@ class FileVoter extends AbstractVoter
      * @param $subject File
      * @return boolean
      */
-    public function canEdit(object $subject): bool
+    protected function canEdit(object $subject): bool
     {
         // Le fichier n'est pas encore disponible
         if(!$this->isAvailable($subject, $this->getUser())) {
@@ -118,7 +118,7 @@ class FileVoter extends AbstractVoter
      * @param $subject File
      * @return boolean
      */
-    public function canCreate(object $subject): bool
+    protected function canCreate(object $subject): bool
     {
         // An authenticated user can create a file
         if ($this->isUserLoggedIn()) {
@@ -133,7 +133,7 @@ class FileVoter extends AbstractVoter
      * @param $subject File
      * @return boolean
      */
-    public function canDelete(object $subject): bool {
+    protected function canDelete(object $subject): bool {
         return $this->canEdit($subject);
     }
 
@@ -145,7 +145,7 @@ class FileVoter extends AbstractVoter
      * @param Access $user
      * @return bool
      */
-    private function isInFileOwningGroup(File $file, Access $user): bool {
+    protected function isInFileOwningGroup(File $file, Access $user): bool {
         $isOrganizationOwned = $file->getOrganization() && $file->getOrganization()->getId() === $user->getOrganization()->getId();
         $isAccessOwned = $file->getPerson() && $file->getPerson()->getId() === $user->getPerson()->getId();
 
@@ -161,7 +161,7 @@ class FileVoter extends AbstractVoter
      * @param Access $user
      * @return bool
      */
-    private function isInFileOwningGroupWithRole(File $file, Access $user): bool {
+    protected function isInFileOwningGroupWithRole(File $file, Access $user): bool {
 
         $requiredRoles = $file->getAccessRoles();
         if ($requiredRoles->count() === 0) {
@@ -184,7 +184,7 @@ class FileVoter extends AbstractVoter
      * @return bool
      * @throws \Exception
      */
-    private function isAvailable(File $file, Access $user): bool {
+    protected function isAvailable(File $file, Access $user): bool {
 
         $today = DatesUtils::new();