Просмотр исходного кода

feat(dashboard): enhance permissions for adding and editing records, update route permissions

ebagabee 1 неделя назад
Родитель
Сommit
ef7f53f72e

+ 1 - 1
src/i18n/locales/pt.json

@@ -290,7 +290,7 @@
       "home": "Início",
       "versions": "Versões",
       "expand_menu": "Expandir menu",
-      "dashboard": "Painel",
+      "dashboard": "Dashboard",
       "explore": "Explorar",
       "advertise": "Anunciar",
       "my_advertisements": "Meus Anúncios",

+ 14 - 2
src/pages/dashboard/DashboardPage.vue

@@ -85,6 +85,7 @@
             <q-separator />
             <q-card-section class="q-pt-md column q-gutter-sm">
               <q-btn
+                v-if="canAdd"
                 unelevated
                 color="primary"
                 label="Criar contrato"
@@ -93,6 +94,7 @@
                 @click="onCriarContrato"
               />
               <q-btn
+                v-if="canEdit"
                 unelevated
                 color="primary"
                 label="Registrar presença"
@@ -101,6 +103,7 @@
                 @click="onRegistrarPresenca"
               />
               <q-btn
+                v-if="canAdd"
                 unelevated
                 color="primary"
                 label="Novo pedido"
@@ -129,8 +132,9 @@
               />
             </div>
 
-            <q-btn
-              unelevated
+              <q-btn
+                v-if="canAdd"
+                unelevated
               color="primary"
               label="Nova data"
               no-caps
@@ -206,11 +210,19 @@ import { getHolidays } from "src/api/holiday";
 import { getStudents } from "src/api/student";
 import { getAllContracts } from "src/api/studentContract";
 import { userStore } from "src/stores/user";
+import { permissionStore } from "src/stores/permission";
 
 ChartJS.register(ArcElement, Tooltip, Legend);
 
 const $q = useQuasar();
 const store = userStore();
+const permissions = permissionStore();
+const canAdd = computed(() =>
+  permissions.getAccess("franchisee_dashboard", "add"),
+);
+const canEdit = computed(() =>
+  permissions.getAccess("franchisee_dashboard", "edit"),
+);
 
 // Faturamento Serviço / Materiais — zerado (sem fluxo de dados ainda),
 // igual ao Franqueador.

+ 6 - 1
src/pages/dashboard/components/FeriadosDialog.vue

@@ -64,7 +64,7 @@
                   'cal-cell--empty': !cell.day,
                   'cal-cell--holiday': cell.isHoliday,
                 }"
-                @click="cell.day && !cell.isHoliday && openNewRecord(cell.day)"
+                @click="canAdd && cell.day && !cell.isHoliday && openNewRecord(cell.day)"
               >
                 <span v-if="cell.day" class="cal-cell__number">{{
                   cell.day
@@ -205,11 +205,16 @@ import DefaultInput from "src/components/defaults/DefaultInput.vue";
 import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 import { getHolidays, createHoliday } from "src/api/holiday";
 import FeriadosEditDialog from "src/pages/dashboard/components/FeriadosEditDialog.vue";
+import { permissionStore } from "src/stores/permission";
 
 defineEmits([...useDialogPluginComponent.emits]);
 
 const { dialogRef, onDialogHide, onDialogOK } = useDialogPluginComponent();
 const $q = useQuasar();
+const permissions = permissionStore();
+const canAdd = computed(() =>
+  permissions.getAccess("franchisee_dashboard", "add"),
+);
 
 const now = new Date();
 const currentMonth = ref(now.getMonth() + 1);

+ 12 - 3
src/pages/dashboard/components/FeriadosEditDialog.vue

@@ -20,7 +20,7 @@
           placeholder="Ex: Ponto facultativo, Natal..."
           icon="mdi-pencil-outline"
           outlined
-          :disable="isReadOnly"
+          :disable="isReadOnly || !canEdit"
           autofocus
         />
 
@@ -31,13 +31,13 @@
           emit-value
           map-options
           outlined
-          :disable="isReadOnly"
+          :disable="isReadOnly || !canEdit"
         />
       </q-card-section>
 
       <q-separator />
 
-      <template v-if="isReadOnly">
+      <template v-if="isReadOnly || !canEdit">
         <q-card-actions align="right">
           <q-btn outline color="primary" label="FECHAR" no-caps @click="onDialogCancel" />
         </q-card-actions>
@@ -46,6 +46,7 @@
       <template v-else>
         <q-card-actions align="between">
           <q-btn
+            v-if="canDelete"
             outline
             color="negative"
             label="EXCLUIR"
@@ -78,11 +79,19 @@ import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue
 import DefaultInput from "src/components/defaults/DefaultInput.vue";
 import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 import { updateHoliday, deleteHoliday } from "src/api/holiday";
+import { permissionStore } from "src/stores/permission";
 
 defineEmits([...useDialogPluginComponent.emits]);
 
 const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent();
 const $q = useQuasar();
+const permissions = permissionStore();
+const canEdit = computed(() =>
+  permissions.getAccess("franchisee_dashboard", "edit"),
+);
+const canDelete = computed(() =>
+  permissions.getAccess("franchisee_dashboard", "delete"),
+);
 
 const props = defineProps({
   holiday: {

+ 1 - 1
src/router/routes.js

@@ -31,7 +31,7 @@ const routes = [
             translate: true,
           },
           requireAuth: true,
-          // requiredPermission: "dashboard",
+          requiredPermission: "franchisee_dashboard",
           breadcrumbs: [
             {
               name: "DashboardPage",

+ 2 - 1
src/stores/navigation.js

@@ -10,7 +10,8 @@ export const navigationStore = defineStore("navigation", () => {
       name: "DashboardPage",
       icon: "mdi-poll",
       disable: false,
-      permission: true,
+      permission: false,
+      permissionScope: "franchisee_dashboard",
     },
     {
       type: "single",