ff-admin/src/stores/ability.ts

77 lines
2.6 KiB
TypeScript
Raw Normal View History

import { defineStore } from "pinia";
2024-09-17 16:44:02 +02:00
import type { PermissionModule, PermissionObject, PermissionSection, PermissionType } from "@/types/permissionTypes";
export const useAbilityStore = defineStore("ability", {
state: () => {
return {
permissions: {} as PermissionObject,
2024-10-07 18:09:18 +02:00
isOwner: false as boolean,
};
},
getters: {
can:
(state) =>
(type: PermissionType | "admin", section: PermissionSection, module?: PermissionModule): boolean => {
const permissions = state.permissions;
2024-10-07 18:09:18 +02:00
if (state.isOwner) return true;
2024-09-01 14:54:49 +02:00
if (type == "admin") return permissions?.admin ?? false;
if (permissions?.admin) return true;
if (
2024-08-27 11:46:24 +02:00
(!module &&
permissions[section] != undefined &&
(permissions[section]?.all == "*" || permissions[section]?.all?.includes(type))) ||
permissions[section]?.all == "*" ||
permissions[section]?.all?.includes(type)
)
return true;
if (module && (permissions[section]?.[module] == "*" || permissions[section]?.[module]?.includes(type)))
return true;
return false;
},
2024-08-27 17:55:10 +02:00
canSection:
(state) =>
(type: PermissionType | "admin", section: PermissionSection): boolean => {
const permissions = state.permissions;
2024-10-07 18:09:18 +02:00
if (state.isOwner) return true;
2024-09-01 14:54:49 +02:00
if (type == "admin") return permissions?.admin ?? false;
if (permissions?.admin) return true;
2024-08-27 17:55:10 +02:00
if (
permissions[section]?.all == "*" ||
permissions[section]?.all?.includes(type) ||
permissions[section] != undefined
)
return true;
return false;
},
2024-08-27 11:46:24 +02:00
_can:
() =>
(
permissions: PermissionObject,
type: PermissionType | "admin",
section: PermissionSection,
module?: PermissionModule
): boolean => {
2024-10-07 18:09:18 +02:00
// ignores ownership
2024-09-01 14:54:49 +02:00
if (type == "admin") return permissions?.admin ?? false;
if (permissions?.admin) return true;
2024-08-27 11:46:24 +02:00
if (
(!module &&
permissions[section] != undefined &&
(permissions[section]?.all == "*" || permissions[section]?.all?.includes(type))) ||
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: {
2024-10-07 18:09:18 +02:00
setAbility(permissions: PermissionObject, isOwner: boolean) {
this.permissions = permissions;
2024-10-07 18:09:18 +02:00
this.isOwner = isOwner;
},
},
});