Skip to content
Snippets Groups Projects
Select Git revision
  • 5fe538e2b58180fb23040831fe9f62ae1e6cd45f
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

TerminWidget.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);
        }
    }