permission_menus.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /** Bits de permissão, espelhando App\Models\Permission na API. */
  2. export const PERMISSION_BITS = Object.freeze({
  3. menu: 256,
  4. view: 1,
  5. add: 2,
  6. edit: 4,
  7. delete: 8,
  8. });
  9. /**
  10. * Níveis de permissão expostos na tela, na ordem em que aparecem.
  11. * `computed` marca o nível que não é editável à mão — ver applyComputedLevels.
  12. */
  13. export const PERMISSION_LEVELS = Object.freeze([
  14. {
  15. key: "menu",
  16. label: "Menu",
  17. bit: PERMISSION_BITS.menu,
  18. computed: true,
  19. computedHint: "Ativado automaticamente por Visualizar.",
  20. },
  21. { key: "view", label: "Visualizar", bit: PERMISSION_BITS.view },
  22. { key: "add", label: "Cadastrar", bit: PERMISSION_BITS.add },
  23. { key: "edit", label: "Editar", bit: PERMISSION_BITS.edit },
  24. { key: "delete", label: "Excluir", bit: PERMISSION_BITS.delete },
  25. ]);
  26. /**
  27. * Menu é derivado de Visualizar: quem enxerga a tela enxerga o menu, e quem
  28. * não enxerga não deve ter o item no menu levando a um 403.
  29. */
  30. export const applyComputedLevels = (bits) =>
  31. bits & PERMISSION_BITS.view
  32. ? bits | PERMISSION_BITS.menu
  33. : bits & ~PERMISSION_BITS.menu;
  34. /**
  35. * Menus da Franqueadora e o scope de permissão que governa cada fluxo.
  36. * A granularidade é o menu: quem tem o menu tem o fluxo inteiro por trás dele.
  37. *
  38. * Deve espelhar src/stores/navigation.js.
  39. */
  40. export const FRANCHISOR_PERMISSION_MENUS = Object.freeze([
  41. { scope: "dashboard", label: "Dashboard", icon: "mdi-poll" },
  42. {
  43. scope: "franchisor_franchisee",
  44. label: "Franqueados",
  45. icon: "mdi-home-variant-outline",
  46. },
  47. {
  48. scope: "franchisor_packages",
  49. label: "Proposta Comercial",
  50. icon: "mdi-package-variant-closed",
  51. },
  52. { scope: "franchisor_products", label: "Produtos", icon: "mdi-cart-outline" },
  53. { scope: "franchisor_tbr", label: "TBR", icon: "mdi-database-outline" },
  54. {
  55. scope: "franchisor_financial",
  56. label: "Financeiro",
  57. icon: "mdi-cash-multiple",
  58. },
  59. { scope: "franchisor_support", label: "Suporte", icon: "mdi-headset" },
  60. { scope: "franchisor_activities", label: "Atividades", icon: "mdi-clipboard-list-outline" },
  61. { scope: "franchisor_registrations", label: "Cadastros", icon: "mdi-account-multiple-outline" },
  62. ]);