message: feat(ifc/frontend): access perms enforced on ifc upload page
diff: <template>
  <div>
  - <no-data-placeholder v-if="false" :show-image="false">
  - <h2>Import IFC Files</h2>
  - <p class="caption">
  - Speckle can now process IFC files and store them as a commit (snapshot). You can then access
  - it from the Speckle API, and receive it in other applications.
  - </p>
  - <template #actions>
  - <v-list rounded class="transparent">
  - <v-list-item link class="primary mb-4" dark @click="showUploadDialog = true">
  - <v-list-item-icon>
  - <v-icon>mdi-plus-box</v-icon>
  - </v-list-item-icon>
  - <v-list-item-content>
  - <v-list-item-title>Upload IFC File</v-list-item-title>
  - </v-list-item-content>
  - </v-list-item>
  -
  - <v-list-item
  - link
  - :class="`grey ${$vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`"
  - href="https://speckle.guide/dev/server-webhooks.html"
  - target="_blank"
  - >
  - <v-list-item-icon>
  - <v-icon>mdi-book-open-variant</v-icon>
  - </v-list-item-icon>
  - <v-list-item-content>
  - <v-list-item-title>Release Announcement</v-list-item-title>
  - <v-list-item-subtitle class="caption"></v-list-item-subtitle>
  - </v-list-item-content>
  - </v-list-item>
  - </v-list>
  - </template>
  - </no-data-placeholder>
  -
  - <error-placeholder v-if="error" error-type="access">
  - <h2>Only stream owners can access webhooks.</h2>
  - <p class="caption">
  - If you need to use webhooks, ask the stream's owner to grant you ownership.
  - </p>
  - </error-placeholder>
  -
  <v-container style="max-width: 768px">
  <portal to="streamTitleBar">
  <div>
  </v-card-text>
  </v-card>
  + <v-alert v-if="stream && (stream.role === 'stream:reviewer' || !stream.role)" type="warning">
  + Your permission level ({{ stream.role ? stream.role : 'none' }}) is not high enough to
  + access this feature.
  + </v-alert>
  +
  + <div v-if="stream && !(stream.role === 'stream:reviewer' || !stream.role)">
  <v-card
  elevation="0"
  color="transparent"
  @done="uploadCompleted"
  ></file-upload-item>
  </template>
  -
  + </div>
  <v-card elevation="1" rounded="lg" :class="`${!$vuetify.theme.dark ? 'grey lighten-5' : ''}`">
  <v-toolbar flat :class="`${!$vuetify.theme.dark ? 'white' : ''} mb-2`">
  <v-toolbar-title>
  @@ -167,11 +131,25 @@ export default {
  FileProcessingItem: () => import('@/components/FileProcessingItem')
  },
  apollo: {
  + stream: {
  + query: gql`
  + query stream($id: String!) {
  + stream(id: $id) {
  + id
  + role
  + }
  + }
  + `,
  + variables() {
  + return { id: this.$route.params.streamId }
  + }
  + },
  streamUploads: {
  query: gql`
  query streamUploads($streamId: String!) {
  stream(id: $streamId) {
  id
  + role
  fileUploads {
  id
  }
  