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
JavaScript
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=