Explorar o código

feat(permissions): update user type permissions API to use IDs instead of slugs and refine user type filtering

ebagabee hai 2 semanas
pai
achega
8b277a744f

+ 4 - 4
src/api/user_type.js

@@ -20,13 +20,13 @@ export const deleteUserType = async (id) => {
   return data.payload;
 };
 
-export const getUserTypePermissions = async (slug) => {
-  const { data } = await api.get(`/user-type/${slug}/permissions`);
+export const getUserTypePermissions = async (id) => {
+  const { data } = await api.get(`/user-type/${id}/permissions`);
   return data.payload;
 };
 
-export const updateUserTypePermissions = async (slug, permissions) => {
-  const { data } = await api.put(`/user-type/${slug}/permissions`, {
+export const updateUserTypePermissions = async (id, permissions) => {
+  const { data } = await api.put(`/user-type/${id}/permissions`, {
     permissions,
   });
   return data.payload;

+ 6 - 1
src/pages/permissions/PermissionsPage.vue

@@ -77,7 +77,12 @@ const tableRef = useTemplateRef("tableRef");
 const getEditableUserTypes = async (...args) => {
   const response = await getUserTypes(...args);
   const hiddenTypes = ["ADMIN", "ADMIN_FRANCHISEE"];
-  if (Array.isArray(response)) return response.filter((row) => !hiddenTypes.includes(row.slug));
+  if (Array.isArray(response)) {
+    return response.filter(
+      (row) =>
+        row.access_scope === "franchisor" && !hiddenTypes.includes(row.slug),
+    );
+  }
   return response;
 };
 

+ 1 - 16
src/pages/permissions/components/AddEditPermissionGroupDialog.vue

@@ -14,16 +14,6 @@
             @update:model-value="onLabelChange"
           />
 
-          <q-select
-            v-model="form.access_scope"
-            outlined
-            emit-value
-            map-options
-            label="Tipo de acesso"
-            :options="accessScopeOptions"
-            :rules="[inputRules.required]"
-          />
-
           <DefaultInput
             v-model="form.slug"
             label="Código"
@@ -86,12 +76,7 @@ const dialogTitle = computed(() =>
 const form = ref({
   label: group?.label ?? "",
   slug: group?.slug ?? "",
-  access_scope: group?.access_scope ?? "unit",
 });
-const accessScopeOptions = [
-  { label: "Unidade", value: "unit" },
-  { label: "Franqueadora", value: "franchisor" },
-];
 
 // Ao editar, o código já existe e não deve ser re-derivado do nome.
 const slugTouched = ref(isEdit.value);
@@ -125,7 +110,7 @@ const { loading, execute } = useSubmitHandler({
 });
 
 const onSave = async () => {
-  const payload = { label: form.value.label, slug: form.value.slug, access_scope: form.value.access_scope };
+  const payload = { label: form.value.label, slug: form.value.slug };
 
   await execute(() =>
     isEdit.value ? updateUserType(group.id, payload) : createUserType(payload),

+ 2 - 2
src/pages/permissions/components/PermissionGroupDialog.vue

@@ -222,7 +222,7 @@ const scopesInMenu = () =>
 const fetchPermissions = async () => {
   loading.value = true;
   try {
-    const payload = await getUserTypePermissions(group.slug);
+    const payload = await getUserTypePermissions(group.id);
     const byScope = Object.fromEntries(
       payload.permissions.map((p) => [p.scope, p]),
     );
@@ -254,7 +254,7 @@ const onSave = async () => {
   saving.value = true;
   try {
     await updateUserTypePermissions(
-      group.slug,
+      group.id,
       Object.entries(permissionIdByScope.value).map(([scope, id]) => ({
         permission_id: id,
         bits: bitsByScope.value[scope] ?? 0,

+ 0 - 7
src/pages/permissions/permission_menus.js

@@ -62,11 +62,4 @@ export const FRANCHISOR_PERMISSION_MENUS = Object.freeze([
   { scope: "franchisor_support", label: "Suporte", icon: "mdi-headset" },
   { scope: "franchisor_activities", label: "Atividades", icon: "mdi-clipboard-list-outline" },
   { scope: "franchisor_registrations", label: "Cadastros", icon: "mdi-account-multiple-outline" },
-  {
-    scope: "config.user-type",
-    label: "Permissões",
-    icon: "mdi-shield-key-outline",
-    // Só o administrador geral enxerga/configura este menu.
-    adminOnly: true,
-  },
 ]);