UNPKG

@nangazaki/vue-rbac

Version:

Role-Based Access Control (RBAC) implementation for Vue.js

3 lines (2 loc) 1.61 kB
import{defaultConfig as s}from"./config/default.js";import{validateConfig as e}from"./config/schema.js";import{CacheTTL as o}from"./core/cache.js";import{getAllPermissionsForRole as r}from"./core/role.js";import{loadDynamicConfig as t}from"./loaders/dynamic.js";import{loadStaticConfig as i}from"./loaders/static.js";import{createStore as a}from"./store.js";import{CONFIG_MODE as n}from"./types/config.types.js";function l(l={}){var c,u;const f=e({...s,...l}),m=f.storage,h=null!==(c=f.storageKey)&&void 0!==c?c:"vue-rbac@v1",d=a(f.roles);if(function(){if(!m)return;const s=m.get(h);s&&(s.roles&&(d.roles=s.roles),s.userRoles&&(d.userRoles=s.userRoles))}(),m){const s=m.get(`${h}:roles`);s&&Array.isArray(s)&&(d.userRoles=s)}let R=new Set;function p(){const s=new Set;for(const e of d.userRoles){r(e,d.roles).forEach(e=>s.add(e))}R=s}function y(){if(!m)return;const s={roles:d.roles,userRoles:d.userRoles};m.set(h,s)}const w=new o(null!==(u=f.cacheTtl)&&void 0!==u?u:0);return{options:f,state:d,async init(){if(!d.isInitialized){switch(d.isInitialized=!0,f.mode){case n.STATIC:await i(d,f);break;case n.DYNAMIC:await t(d,f),w.touch();break;case n.HYBRID:await i(d,f),await t(d,f,!0),w.touch()}y()}return p(),d.roles},fetchRolesAndPermissions:async()=>w.isValid()?(p(),d.roles):(await t(d,f),w.touch(),p(),d.roles),setUserRoles(s){d.userRoles=Array.isArray(s)?s:[s],y(),p()},hasPermission:s=>R.has(s),hasRole:s=>d.userRoles.includes(s),hasAnyPermission:s=>s.some(s=>R.has(s)),hasAllPermissions:s=>s.every(s=>R.has(s)),invalidateCache(){w.invalidate()}}}export{l as createRBAC}; //# sourceMappingURL=rbac.js.map