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'
225225import  humanDate  from  ' @/composables/filters/humanDate' 
226226import  decode  from  ' @/composables/filters/decode' 
227227import  truncate  from  ' @/composables/filters/truncate' 
228- import  { inject , reactive , computed ,  watch , toRefs  } from  ' vue' 
228+ import  { inject , reactive , watch , toRefs  } from  ' vue' 
229229import  { threadsApi  } from  ' @/api' 
230230import  { AuthStore  } from  ' @/composables/stores/auth' 
231231import  { 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