| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /** 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" },
- ]);
|