UNPKG

vue-zo

Version:

A Vuejs/Nuxt plugin that allows you to use roles and permissions in your components (setup macro & option API), also compatible as middleware, methods, composition-api and Pinia

103 lines 8.09 kB
import { match } from '../utils/strings'; export class Zo { constructor(options = {}) { this.#canPersistent = false; this.#roles = []; this.#permissions = []; this.#superRole = undefined; /* |------------------------------------------------------------------------- | Setters |------------------------------------------------------------------------- | | These functions controls the "permissions" and "roles" provided | by Vue Gates, or from a custom array. | */ this.setRoles = (roles) => { this.#roles = roles; if (this.#canPersistent) { localStorage.setItem('roles', JSON.stringify(roles)); } }; this.setPermissions = (permissions) => { this.#permissions = permissions; if (this.#canPersistent) { localStorage.setItem('permissions', JSON.stringify(permissions)); } }; /* |------------------------------------------------------------------------- | Getters |------------------------------------------------------------------------- | | These functions return the "permissions" and "roles" stored. | This is useful when you want list all data. | */ this.getRoles = () => this.#roles; this.getPermissions = () => this.#permissions; this.isSuperUser = () => this.#superRole && this.#roles.includes(this.#superRole); /* |------------------------------------------------------------------------- | Directives |------------------------------------------------------------------------- | | These is a group of functions for Vue Directives. | This is useful when you want valid a "permission" or "role" | programmatically. | */ // Roles this.hasRole = (role) => this.isSuperUser() || this.#roles.includes(role); this.unlessRole = (role) => !this.hasRole(role); this.hasAnyRole = (values) => { if (this.isSuperUser()) { return true; } const roles = values.split('|'); return roles.some((role) => this.hasRole(role)); }; this.hasAllRoles = (values) => { if (this.isSuperUser()) { return true; } const roles = values.split('|'); return roles.every((role) => this.hasRole(role)); }; // Permissions this.hasPermission = (permission) => this.isSuperUser() || !!this.#permissions.find((wildcard) => match(permission, wildcard)); this.unlessPermission = (permission) => !this.hasPermission(permission); this.hasAnyPermission = (values) => { if (this.isSuperUser()) { return true; } const permissions = values.split('|'); return permissions.some((permission) => this.hasPermission(permission)); }; this.hasAllPermissions = (values) => { if (this.isSuperUser()) { return true; } const permissions = values.split('|'); return permissions.every((permission) => this.hasPermission(permission)); }; const canPersistent = options.persistent; const roles = canPersistent ? JSON.parse(localStorage.getItem('roles')) : []; const permissions = canPersistent ? JSON.parse(localStorage.getItem('permissions')) : []; this.#canPersistent = canPersistent; this.#roles = roles; this.#permissions = permissions; this.#superRole = options.superRole; } #canPersistent; #roles; #permissions; #superRole; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9aby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHekMsTUFBTSxPQUFPLEVBQUU7SUFTYixZQUFZLFVBQW9CLEVBQUU7UUFSbEMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUV0QixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUU1QixlQUFVLEdBQXVCLFNBQVMsQ0FBQztRQWlCM0M7Ozs7Ozs7O1VBUUU7UUFFRixhQUFRLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQztRQUVGLG1CQUFjLEdBQUcsQ0FBQyxXQUFxQixFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDbEU7UUFDSCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7VUFRRTtRQUVGLGFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTdCLG1CQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUV6QyxnQkFBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1B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