![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/ts.corals.io/frontend/plugins/ |
import Vue from 'vue'; export default ({store}, inject) => { let can = function (targetAbility, targetModel) { for (let permission of store.getters.permissions) { if (isTargetAbilityAvailable(permission, targetAbility, targetModel)) { return true; } } return false; }; inject('can', can); inject('cant', (targetAbility, targetModel) => !can(targetAbility, targetModel)); inject('getMenus', () => { let menus = [ {'link': '/', label: 'Calender', permission: ['view', 'entry']}, {'link': '/dashboard', label: 'Dashboard'}, {'link': '/clients', label: 'Clients', permission: ['view', 'client']}, {'link': '/activities', label: 'Activities', permission: ['view', 'activity']}, {'link': '/users', label: 'Users', permission: ['view', 'user']}, {'link': '/entries', label: 'Entries', permission: ['timesheet', 'admin']}, { label: 'Reports', permission: ['view', 'entry'], children: [ {link: '/reports', label: 'Timesheet Report', permission: ['view', 'entry'], authCheck: 'exact'}, {link: '/reports/expenses', label: 'Expenses', permission: ['timesheet', 'admin'], authCheck: 'exact'}, {link: '/reports/incomes', label: 'Incomes', permission: ['timesheet', 'admin'], authCheck: 'exact'}, { link: '/reports/expenses-vs-incomes', label: 'Expenses VS Incomes', permission: ['timesheet', 'admin'], authCheck: 'exact' } ] }, {'link': '/expenses', label: 'Expenses', permission: ['view', 'expense']}, {'link': '/incomes', label: 'Incomes', permission: ['view', 'income']}, {'link': '/time-off-requests', label: 'Time Off', permission: ['view', 'time_off_request']}, {'link': '/settings', label: 'Settings', permission: ['update', 'setting']}, ]; let children; return menus.filter(menu => { if (menu.children && menu.children.length !== 0) { children = []; children = menu.children.filter(child => { return can(...child.permission); }); menu.children = children; } if (menu.permission) { return can(...menu.permission); } return true; }); }); let isAdmin = () => can('timesheet', 'admin'); inject('isAdmin', () => isAdmin()); inject('notAdmin', () => !isAdmin()); Vue.directive('can', { inserted: (el, binding) => { if (!can(...binding.value.split(' '))) { el.parentNode.removeChild(el); } } }) Vue.directive('isAdmin', { inserted: el => { if (!isAdmin()) { el.parentNode.removeChild(el); } } }) }; /** * * @param permission * @param targetAbility * @param targetModel * @returns {boolean} */ function isTargetAbilityAvailable(permission, targetAbility, targetModel) { if (!permission || permission === '-') { return false; } let {module, model, ability} = analyticPermission(permission); return model === targetModel && ability === targetAbility; } /** * * @param permission * @returns {{module: *, model: *, ability}} */ function analyticPermission(permission) { let [module, model] = permission.split('::'), ability; [model, ability] = model.split('.'); return { module, model, ability } }