@nangazaki/vue-rbac
Version:
Role-Based Access Control (RBAC) implementation for Vue.js
3 lines (2 loc) • 1.32 kB
JavaScript
import{defineComponent as o}from"vue";import{useRBAC as l}from"../composables/useRBAC.js";import{logger as r}from"../utils/logger.js";const i=["role","permission","any","all","not"],e=o({name:"RbacGuard",props:{role:{type:[String,Array],default:void 0},permission:{type:[String,Array],default:void 0},any:{type:[String,Array],default:void 0},all:{type:[String,Array],default:void 0},not:{type:[String,Array],default:void 0}},setup(o,{slots:e}){const a=l();function s(){return function(){const l=i.filter(l=>void 0!==o[l]);l.length>1&&r.warn(`[RbacGuard] Multiple access props detected: [${l.join(", ")}]. Only "${l[0]}" will be evaluated. Use a single prop per guard.`)}(),void 0!==o.role?n(o.role).some(o=>a.hasRole(o)):void 0!==o.permission?n(o.permission).every(o=>a.hasPermission(o)):void 0!==o.any?a.hasAnyPermission(n(o.any)):void 0!==o.all?a.hasAllPermissions(n(o.all)):void 0!==o.not&&!n(o.not).some(o=>a.hasRole(o)||a.hasPermission(o))}return()=>{var o,l,r,i,n;return a.state.isLoading?null!==(l=null===(o=e.loading)||void 0===o?void 0:o.call(e))&&void 0!==l?l:null:s()?null===(r=e.default)||void 0===r?void 0:r.call(e):null!==(n=null===(i=e.fallback)||void 0===i?void 0:i.call(e))&&void 0!==n?n:null}}});function n(o){return Array.isArray(o)?o:[o]}export{e as RbacGuard};
//# sourceMappingURL=rbac-guard.js.map