Skip to content

Commit 6c5d699

Browse files
committed
feat: implement permissions in threads
1 parent 5a90940 commit 6c5d699

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/views/Threads.vue

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,14 +201,14 @@
201201

202202
<div class="board-sidebar">
203203
<div class="board-actions" v-if="loggedIn">
204-
<a v-if="canCreate" class="button secondary" href="#" @click="loadEditor()">
204+
<a v-if="canCreate()" class="button secondary" href="#" @click="loadEditor()">
205205
<i class="icon-epoch-add"></i>Start a New Thread
206206
</a>
207207
<a class="button secondary" @click="watchBoard()" v-if="threadData && threadData.data && threadData.data.board && !threadData.data.board.watched">
208208
<i class="icon-epoch-watch"></i>Watch This Board
209209
</a>
210210
<a class="button secondary" @click="showSetModerators = true"
211-
v-if="canSetModerator">
211+
v-if="canSetModerator()">
212212
<i class="icon-epoch-watch"></i>Set Moderators
213213
</a>
214214
</div>
@@ -225,7 +225,7 @@ import SetModeratorsModal from '@/components/modals/threads/SetModerators.vue'
225225
import humanDate from '@/composables/filters/humanDate'
226226
import decode from '@/composables/filters/decode'
227227
import truncate from '@/composables/filters/truncate'
228-
import { inject, reactive, computed, watch, toRefs } from 'vue'
228+
import { inject, reactive, watch, toRefs } from 'vue'
229229
import { threadsApi } from '@/api'
230230
import { AuthStore } from '@/composables/stores/auth'
231231
import { PreferencesStore } from '@/composables/stores/prefs'
@@ -306,6 +306,18 @@ export default {
306306
return sortClass
307307
}
308308
309+
const canSetModerator = () => {
310+
// TODO(akinsey): Implement ban status check
311+
// if (BanSvc.banStatus()) return false
312+
return v.permissionUtils.hasPermission('moderators.add.allow') && v.permissionUtils.hasPermission('moderators.remove.allow')
313+
}
314+
315+
const canCreate = () => {
316+
// TODO(akinsey): Implement ban status check
317+
// if (BanSvc.banStatus()) return false
318+
return v.threadData.data?.write_access || v.permissionUtils.hasPermission('threads.create.allow')
319+
}
320+
309321
/* Internal Data */
310322
const $http = inject(Http)
311323
const $swrvCache = inject('$swrvCache')
@@ -324,6 +336,7 @@ export default {
324336
}, processThreads, { cache: $swrvCache, dedupingInterval: 100, ttl: 500 }),
325337
prefs: $prefs.data,
326338
loggedIn: $auth.loggedIn,
339+
permissionUtils: $auth.permissionUtils,
327340
showSetModerators: false,
328341
defaultAvatar: window.default_avatar,
329342
defaultAvatarShape: window.default_avatar_shape,
@@ -352,10 +365,6 @@ export default {
352365
watch(() => v.loggedIn, () => v.threadData.mutate(processThreads)) // Update threads on login
353366
watch(() => $route.query, () => v.threadData.mutate(processThreads)) // Update on query change
354367
355-
/* Computed Data */
356-
const canCreate = computed(() => true)
357-
const canSetModerator = computed(() => true)
358-
359368
return { ...toRefs(v), canCreate, canSetModerator, loadEditor, watchBoard, setSortField, getSortClass, humanDate, decode, truncate }
360369
}
361370
}

0 commit comments

Comments
 (0)