/** Bits de permissão, espelhando App\Models\Permission na API. */ export const PERMISSION_BITS = Object.freeze({ menu: 256, view: 1, add: 2, edit: 4, delete: 8, }); /** * Níveis de permissão expostos na tela, na ordem em que aparecem. * `computed` marca o nível que não é editável à mão — ver applyComputedLevels. */ export const PERMISSION_LEVELS = Object.freeze([ { key: "menu", label: "Menu", bit: PERMISSION_BITS.menu, computed: true, computedHint: "Ativado automaticamente por Visualizar.", }, { key: "view", label: "Visualizar", bit: PERMISSION_BITS.view }, { key: "add", label: "Cadastrar", bit: PERMISSION_BITS.add }, { key: "edit", label: "Editar", bit: PERMISSION_BITS.edit }, { key: "delete", label: "Excluir", bit: PERMISSION_BITS.delete }, ]); /** * Menu é derivado de Visualizar: quem enxerga a tela enxerga o menu, e quem * não enxerga não deve ter o item no menu levando a um 403. */ export const applyComputedLevels = (bits) => bits & PERMISSION_BITS.view ? bits | PERMISSION_BITS.menu : bits & ~PERMISSION_BITS.menu; /** * Menus da Franqueadora e o scope de permissão que governa cada fluxo. * A granularidade é o menu: quem tem o menu tem o fluxo inteiro por trás dele. * * Deve espelhar src/stores/navigation.js. */ export const FRANCHISOR_PERMISSION_MENUS = Object.freeze([ { scope: "dashboard", label: "Dashboard", icon: "mdi-poll" }, { scope: "franchisor_franchisee", label: "Franqueados", icon: "mdi-home-variant-outline", }, { scope: "franchisor_packages", label: "Proposta Comercial", icon: "mdi-package-variant-closed", }, { scope: "franchisor_products", label: "Produtos", icon: "mdi-cart-outline" }, { scope: "franchisor_tbr", label: "TBR", icon: "mdi-database-outline" }, { scope: "franchisor_financial", label: "Financeiro", icon: "mdi-cash-multiple", }, { 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" }, ]);