@casl/vue
Version:
Vue plugin for CASL which makes it easy to add permissions in any Vue application
3 lines (2 loc) • 1.7 kB
JavaScript
import{ref as i,inject as r,provide as t,defineComponent as n}from"vue";import{PureAbility as e}from"@casl/ability";function reactiveAbility(r){if(Object.hasOwn(r,"possibleRulesFor"))return r;var t=i(true);r.on("updated",(function(){t.value=!t.value}));var n=r.possibleRulesFor.bind(r);r.possibleRulesFor=function(i,r){t.value=t.value;return n(i,r)};r.can=r.can.bind(r);r.cannot=r.cannot.bind(r);return r}var o=Symbol("ability");function useAbility(){var i=r(o);if(!i)throw new Error("Cannot inject Ability instance because it was not provided");return i}function provideAbility(i){t(o,reactiveAbility(i))}function a(i){if(i.a!==void 0)return"a";if(i.this!==void 0)return"this";if(i.an!==void 0)return"an";return""}var u=n({name:"Can",props:{I:String,do:String,a:[String,Function],an:[String,Function],this:[String,Function,Object],on:[String,Function,Object],not:Boolean,passThrough:Boolean,field:String},setup:function i(r,t){var n=t.slots;var e=r;var o="do";var u="on";if(e[o]===void 0){o="I";u=a(r)}if(!e[o])throw new Error("Neither `I` nor `do` prop was passed in <Can>");if(!n.default)throw new Error("Expects to receive default slot");var l=useAbility();return function(){var i=l.can(e[o],e[u],e.field);var t=r.not?!i:i;if(!r.passThrough)return t?n.default():null;return n.default({allowed:t,ability:l})}}});function l(i,r,t){if(!r||!(r instanceof e))throw new Error("Please provide an Ability instance to abilitiesPlugin plugin");i.provide(o,reactiveAbility(r));if(t&&t.useGlobalProperties){i.config.globalProperties.$ability=r;i.config.globalProperties.$can=r.can.bind(r)}}export{o as ABILITY_TOKEN,u as Can,l as abilitiesPlugin,provideAbility,useAbility};
//# sourceMappingURL=index.js.map