|
|
@@ -1,14 +1,37 @@
|
|
|
+/** Bits de permissão, espelhando App\Models\Permission na API. */
|
|
|
+export const PERMISSION_BITS = Object.freeze({
|
|
|
+ menu: 256,
|
|
|
+ view: 1,
|
|
|
+ add: 2,
|
|
|
+ edit: 4,
|
|
|
+});
|
|
|
+
|
|
|
/**
|
|
|
* Níveis de permissão expostos na tela, na ordem em que aparecem.
|
|
|
- * Os bits espelham App\Models\Permission na API.
|
|
|
+ * `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: 256 },
|
|
|
- { key: "view", label: "Visualizar", bit: 1 },
|
|
|
- { key: "add", label: "Cadastrar", bit: 2 },
|
|
|
- { key: "edit", label: "Editar", bit: 4 },
|
|
|
+ {
|
|
|
+ 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 },
|
|
|
]);
|
|
|
|
|
|
+/**
|
|
|
+ * 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.
|