Skip to content
Snippets Groups Projects
Select Git revision
  • b742d3008e6a47a1cd431392fc18bc98b05d7891
  • main default protected
  • studip-rector
  • ci-opt
  • course-members-export-as-word
  • data-vue-app
  • pipeline-improvements
  • webpack-optimizations
  • rector
  • icon-renewal
  • http-client-and-factories
  • jsonapi-atomic-operations
  • vueify-messages
  • tic-2341
  • 135-translatable-study-areas
  • extensible-sorm-action-parameters
  • sorm-configuration-trait
  • jsonapi-mvv-routes
  • docblocks-for-magic-methods
19 results

DIContainer.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Authority.php 4.17 KiB
    <?php
    
    namespace JsonApi\Routes\Files;
    
    use User;
    use JsonApi\Routes\Courses\Authority as CoursesAuth;
    use JsonApi\Routes\Users\Authority as UsersAuth;
    
    /**
     * @SuppressWarnings(PHPMD.TooManyPublicMethods)
     * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
     */
    class Authority
    {
        public static function canShowFileArea(User $user, \SimpleORMap $resource): bool
        {
            if (
                $resource instanceof \Course &&
                !CoursesAuth::canShowCourse($user, $resource, CoursesAuth::SCOPE_EXTENDED)
            ) {
                return false;
            }
    
            if ($resource instanceof \Course || $resource instanceof \Institute) {
                $info = \PluginManager::getInstance()->getPluginInfo('CoreDocuments');
                if (!\PluginManager::getInstance()->isPluginActivated($info['id'], $resource->id)) {
                    return false;
                }
            }
    
            return ($folder = \Folder::findTopFolder($resource->id)) &&
                ($rootFolder = $folder->getTypedFolder()) &&
                $rootFolder->isVisible($user->id);
        }
    
        public static function canShowFolder(User $user, \FolderType $folder)
        {
            return $folder->isReadable($user->id);
        }
    
        public static function canUpdateFolder(User $user, \FolderType $folder)
        {
            return $folder->isEditable($user->id);
        }
    
        public static function canDeleteFolder(User $user, \FolderType $folder)
        {
            return $folder->isEditable($user->id);
        }
    
        public static function canShowFileRef(User $user, \FileRef $fileRef)
        {
            return $fileRef->getFileType()->isVisible($user->id) || $fileRef->getFileType()->isDownloadable($user->id);
        }
    
        public static function canUpdateFileRef(User $user, \FileRef $fileRef)
        {
            return $fileRef->getFileType()->isWritable($user->id);
        }
    
        public static function canDeleteFileRef(User $user, \FileRef $fileRef)
        {
            return $fileRef->getFileType()->isWritable($user->id);
        }
    
        public static function canDownloadFileRef(User $user, \FileRef $fileRef)
        {
            return $fileRef->getFileType()->isDownloadable($user->id);
        }
    
        public static function canShowFile(User $user, \File $file)
        {
            return $file['user_id'] === $user->id ||
                0 <
                    count(
                        $file->refs->filter(function (\FileRef $ref) use ($user) {
                            $folder = $ref->foldertype;
    
                            return $folder && $folder->isVisible($user->id) && $folder->isReadable($user->id);
                        }, 1)
                    );
        }
    
        public static function canUpdateFile(User $user, \File $file)
        {
            return 0 <
                count(
                    $file->refs->filter(function (\FileRef $ref) use ($user) {
                        return $ref->getFileType()->isWritable($user->id);
                    }, 1)
                );
        }
    
        public static function canIndexCourse(User $user, \Course $course)
        {
            return CoursesAuth::canShowCourse($user, $course, CoursesAuth::SCOPE_EXTENDED);
        }
    
        /**
         * @SuppressWarnings(PHPMD.UnusedFormalParameters)
         */
        public static function canIndexInstitute(User $user, \Institute $institute)
        {
            return true;
        }
    
        public static function canIndexUser(User $user, \User $otherUser)
        {
            return UsersAuth::canShowUser($user, $otherUser);
        }
    
        /**
         * @SuppressWarnings(PHPMD.UnusedFormalParameters)
         */
        public static function canShowTermsOfUse(User $user, \ContentTermsOfUse $terms)
        {
            return true; // !!
        }
    
        /**
         * @SuppressWarnings(PHPMD.UnusedFormalParameters)
         */
        public static function canIndexTermsOfUse(User $user)
        {
            return true; // !!
        }
    
        public static function canCreateSubfolder(User $user, \FolderType $folder)
        {
            return $folder->isSubfolderAllowed($user->id);
        }
    
        public static function canCreateFileRefsInFolder(User $user, \FolderType $folder)
        {
            return $folder->isWritable($user->id);
        }
    
        public static function canCopyFolder(User $user, \FolderType $sourceFolder, \FolderType $destinationFolder)
        {
            return self::canCreateFileRefsInFolder($user, $destinationFolder) && self::canShowFolder($user, $sourceFolder);
        }
    }