{-
  Accesss granted via tags; default is no accesss.
  Permission must be explicitly granted.

  Access permission is the disjunction of permit tags
  Tags are split on "AND" to encode conjunction.

  Note that nested routes automatically inherit all tags from the parent.

  Admins always have access to entities within their assigned schools.

  Tags:
    !free       -- free for all
    !lecturer   -- lecturer    for this course (or the school, if route is not connected to a course)
    !corrector  -- corrector   for this sheet  (or the course, if route is not connected to a sheet )
    !registered -- participant for this course (no effect outside of courses)

    !materials  -- only if course allows all materials to be free (no meaning outside of courses)
    !time       -- access depends on time somehow

    !deprecated -- like free, but logs and gives a warning
-}

/static StaticR Static appStatic                              !free
/auth   AuthR   Auth   getAuth                                !free

/favicon.ico FaviconR GET                                     !free
/robots.txt RobotsR GET                                       !free

/        HomeR    GET POST                                    !free
/profile ProfileR GET                                         !free
/users   UsersR   GET                                         -- no tags, i.e. admins only

/term                       TermShowR         GET             !free
/term/edit                  TermEditR         GET POST
/term/#TermId/edit          TermEditExistR    GET
!/term/#TermId              TermCourseListR   GET             !free

-- For Pattern Synonyms see Foundation
/course/                    CourseListR       GET             !free
!/course/new                CourseNewR        GET POST        !lecturer
/course/#TermId/#Text       CourseR                           !lecturer !updateFavourite:
  /show                       CShowR      GET POST            !free
  /edit                       CEditR      GET POST
  /ex                         SheetListR  GET                 !materials
  !/ex/new                    SheetNewR   GET POST
  /ex/#Text SheetR                                            !materials:
    /show                       SShowR    GET                 !time !corrector
    /#SheetFileType/#FilePath   SFileR    GET                 !time !corrector
    /edit                       SEditR    GET POST
    /delete                     SDelR     GET POST
    !/submission/#SubmissionMode SubmissionR GET POST         !timeANDregistered


!/#UUID CryptoUUIDDispatchR GET                                 !free

-- TODO below
!/#{ZIPArchiveName SubmissionId} SubmissionDownloadArchiveR GET !deprecated
!/#CryptoUUIDSubmission/#FilePath SubmissionDownloadSingleR GET !deprecated

/submission                 SubmissionListR GET                 !deprecated
/submission/#CryptoUUIDSubmission SubmissionDemoR GET POST      !deprecated
/submissions.zip SubmissionDownloadMultiArchiveR POST           !deprecated
