Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/ts.corals.io/frontend/plugins/CoralsAuthorization.js
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
  }

}

Spamworldpro Mini