navigation permission and ability checker
This commit is contained in:
parent
cb80771f7a
commit
35cba95887
6 changed files with 213 additions and 92 deletions
33
src/stores/ability.ts
Normal file
33
src/stores/ability.ts
Normal file
|
@ -0,0 +1,33 @@
|
|||
import { defineStore } from "pinia";
|
||||
import type { PermissionModule, PermissionObject, PermissionSection, PermissionType } from "../types/permissionTypes";
|
||||
|
||||
export const useAbilityStore = defineStore("ability", {
|
||||
state: () => {
|
||||
return {
|
||||
permissions: {} as PermissionObject,
|
||||
};
|
||||
},
|
||||
getters: {
|
||||
can:
|
||||
(state) =>
|
||||
(type: PermissionType | "admin", section: PermissionSection, module?: PermissionModule): boolean => {
|
||||
const permissions = state.permissions;
|
||||
if (type == "admin") return permissions.admin ?? false;
|
||||
if (permissions.admin) return true;
|
||||
if (
|
||||
(!module && permissions[section] != undefined) ||
|
||||
permissions[section]?.all == "*" ||
|
||||
permissions[section]?.all?.includes(type)
|
||||
)
|
||||
return true;
|
||||
if (module && (permissions[section]?.[module] == "*" || permissions[section]?.[module]?.includes(type)))
|
||||
return true;
|
||||
return false;
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
setAbility(permissions: PermissionObject) {
|
||||
this.permissions = permissions;
|
||||
},
|
||||
},
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue