import axios from 'axios'; import { useState } from './useState'; export function useAcl() { const state = useState(); async function fetch() { const { data } = await axios.get('VnUsers/acls'); const acls = {}; data.forEach((acl) => { acls[acl.model] = acls[acl.model] || {}; acls[acl.model][acl.property] = acls[acl.model][acl.property] || {}; acls[acl.model][acl.property][acl.accessType] = true; }); state.setAcls(acls); } function hasAny(acls) { for (const acl of acls) { let { model, props, accessType } = acl; const modelAcls = state.getAcls().value[model]; Array.isArray(props) || (props = [props]); if (modelAcls) return ['*', ...props].some((key) => { const acl = modelAcls[key]; return acl && (acl['*'] || acl[accessType]); }); } return false; } return { fetch, hasAny, state, }; }