44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
|
import FormInput from '../components/form-input';
|
||
|
|
||
|
export default function getAcls(acls, aclService, $element, $attrs, user) {
|
||
|
const attrsVnAcl = user ? $attrs.vnUserAcl : $attrs.vnAcl;
|
||
|
acls = attrsVnAcl.split(',').map(i => i.trim());
|
||
|
if (acls[0] == '') return;
|
||
|
if (user) {
|
||
|
const splitAcl = acls[0].split('.');
|
||
|
const splitSlash = splitAcl[1].split('/');
|
||
|
|
||
|
const model = splitAcl[0];
|
||
|
const property = splitSlash[0];
|
||
|
let accessType = splitSlash[1];
|
||
|
|
||
|
if (accessType === 'w') accessType = 'WRITE';
|
||
|
else if (accessType === 'r') accessType = 'READ';
|
||
|
if (aclService.hasAnyACL(model, property, accessType)) return;
|
||
|
} else if (aclService.hasAny(acls)) return;
|
||
|
|
||
|
disableElement($attrs, $element);
|
||
|
}
|
||
|
|
||
|
function disableElement($attrs, $element) {
|
||
|
const action = $attrs.vnAclAction || 'disable';
|
||
|
if (action === 'disable') {
|
||
|
let element = $element[0];
|
||
|
let elementToDisable = element.$ctrl;
|
||
|
|
||
|
if (!(elementToDisable instanceof FormInput)) {
|
||
|
const selector = 'input, textarea, button, submit';
|
||
|
|
||
|
if (!element.matches(selector))
|
||
|
element = element.querySelector(selector);
|
||
|
|
||
|
elementToDisable = element;
|
||
|
}
|
||
|
|
||
|
if (elementToDisable)
|
||
|
elementToDisable.disabled = true;
|
||
|
} else
|
||
|
$element.remove();
|
||
|
}
|
||
|
|