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
118 lines • 8.95 kB
JavaScript
"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to set private field on non-instance");
}
privateMap.set(receiver, value);
return value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return privateMap.get(receiver);
};
var _canPersistent, _roles, _permissions, _superRole;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Zo = void 0;
const strings_1 = require("../utils/strings");
class Zo {
constructor(options = {}) {
_canPersistent.set(this, false);
_roles.set(this, []);
_permissions.set(this, []);
_superRole.set(this, undefined);
/*
|-------------------------------------------------------------------------
| Setters
|-------------------------------------------------------------------------
|
| These functions controls the "permissions" and "roles" provided
| by Vue Gates, or from a custom array.
|
*/
this.setRoles = (roles) => {
__classPrivateFieldSet(this, _roles, roles);
if (__classPrivateFieldGet(this, _canPersistent)) {
localStorage.setItem('roles', JSON.stringify(roles));
}
};
this.setPermissions = (permissions) => {
__classPrivateFieldSet(this, _permissions, permissions);
if (__classPrivateFieldGet(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 = () => __classPrivateFieldGet(this, _roles);
this.getPermissions = () => __classPrivateFieldGet(this, _permissions);
this.isSuperUser = () => __classPrivateFieldGet(this, _superRole) && __classPrivateFieldGet(this, _roles).includes(__classPrivateFieldGet(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() || __classPrivateFieldGet(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() ||
!!__classPrivateFieldGet(this, _permissions).find((wildcard) => strings_1.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'))
: [];
__classPrivateFieldSet(this, _canPersistent, canPersistent);
__classPrivateFieldSet(this, _roles, roles);
__classPrivateFieldSet(this, _permissions, permissions);
__classPrivateFieldSet(this, _superRole, options.superRole);
}
}
exports.Zo = Zo;
_canPersistent = new WeakMap(), _roles = new WeakMap(), _permissions = new WeakMap(), _superRole = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9aby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUF5QztBQUd6QyxNQUFhLEVBQUU7SUFTYixZQUFZLFVBQW9CLEVBQUU7UUFSbEMseUJBQWlCLEtBQUssRUFBQztRQUV2QixpQkFBbUIsRUFBRSxFQUFDO1FBRXRCLHVCQUF5QixFQUFFLEVBQUM7UUFFNUIscUJBQWlDLFNBQVMsRUFBQztRQWlCM0M7Ozs7Ozs7O1VBUUU7UUFFRixhQUFRLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUM3Qix1QkFBQSxJQUFJLFVBQVUsS0FBSyxFQUFDO1lBQ3BCLGtEQUF5QjtnQkFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsbUJBQWMsR0FBRyxDQUFDLFdBQXFCLEVBQUUsRUFBRTtZQUN6Qyx1QkFBQSxJQUFJLGdCQUFnQixXQUFXLEVBQUM7WUFDaEMsa0RBQXlCO2dCQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDbEU7UUFDSCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7VUFRRTtRQUVGLGFBQVEsR0FBRyxHQUFHLEVBQUUscUNBQVksQ0FBQztRQUU3QixtQkFBYyxHQUFHLEdBQUcsRUFBRSwyQ0FBa0IsQ0FBQztRQUV6QyxnQkFBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLDRDQUFtQixxQ0FBWSxRQUFRLDBDQUFpQixDQUFDO1FBRTdFOzs7Ozs7Ozs7VUFTRTtRQUVGLFFBQVE7UUFDUixZQUFPLEdBQUcsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLHFDQUFZLFFB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