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

50 lines 4.22 kB
import { isConditionPassed } from './utils/validators'; import { Zo } from './core/Zo'; const registerDirectives = (app, newSyntax = false) => { const lifecycleName = newSyntax ? 'mounted' : 'inserted'; const directiveOptions = (condition) => [ condition, { [lifecycleName]: isConditionPassed(app, condition), }, ]; app.directive(...directiveOptions('role')); app.directive(...directiveOptions('permission')); app.directive(...directiveOptions('can')); // Alias for "v-permission" app.directive('role-or-permission', { [lifecycleName]: isConditionPassed(app, (binding) => { const values = binding.value.split('|'); const role = values[0]; const permission = values[1]; return app.$zo.hasRole(role) || app.$zo.hasPermission(permission); }), }); }; const registerOnVue2 = (app, instance) => { Object.defineProperty(app.prototype, '$zo', { get() { return instance; }, }); app.$zo = instance; registerDirectives(app, false); }; const registerOnVue3 = (app, instance) => { app.config.globalProperties.$zo = instance; app.$zo = instance; app.provide('$zo', instance); registerDirectives(app, true); }; export const VueZo = { install(Vue, options = {}) { const isVue3 = !!Vue.config.globalProperties; const zo = new Zo(options); if (isVue3) { registerOnVue3(Vue, zo); } else { registerOnVue2(Vue, zo); } }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBaUIsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLEVBQUU7SUFDbEUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUV6RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUM7UUFDOUMsU0FBUztRQUNUO1lBQ0UsQ0FBQyxhQUFhLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO1NBQ25EO0tBQ0YsQ0FBQztJQUVGLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2pELEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO0lBQ3RFLEdBQUcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUU7UUFDbEMsQ0FBQyxhQUFhLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBaUIsRUFBRSxRQUFZLEVBQUUsRUFBRTtJQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQzFDLEdBQUc7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDbkIsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBaUIsRUFBRSxRQUFZLEVBQUUsRUFBRTtJQUN6RCxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDM0MsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFFbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixPQUFPLENBQUMsR0FBUSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQzVCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUksTUFBTSxFQUFFO1lBQ1YsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QjthQUFNO1lBQ0wsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FDRixDQUFDIn0=