Files
bigcapital/src/common/permissionsSchema.js
2021-12-27 16:01:22 +02:00

532 lines
17 KiB
JavaScript

import { chain } from 'lodash';
import intl from 'react-intl-universal';
import {
AbilitySubject,
AccountAction,
BillAction,
CreditNoteAction,
CustomerAction,
ExpenseAction,
ItemAction,
ManualJournalAction,
PaymentMadeAction,
PaymentReceiveAction,
ReportsAction,
SaleEstimateAction,
SaleInvoiceAction,
SaleReceiptAction,
VendorAction,
VendorCreditAction,
} from './abilityOption';
export const ModulePermissionsStyle = {
Columns: 'columns',
Vertical: 'vertical',
};
const PermissionColumn = {
View: 'view',
Create: 'create',
Delete: 'delete',
Edit: 'edit',
};
export const getPermissionsSchema = () => [
{
label: intl.get('permissions.items_inventory'),
type: ModulePermissionsStyle.Columns,
serviceFullAccess: true,
columns: [
{ label: intl.get('permissions.column.view'), key: 'view' },
{ label: intl.get('permissions.column.create'), key: 'create' },
{ label: intl.get('permissions.column.edit'), key: 'edit' },
{ label: intl.get('permissions.column.delete'), key: 'delete' },
],
services: [
{
label: intl.get('permissions.items'),
subject: AbilitySubject.Item,
permissions: [
{ label: 'View', key: ItemAction.View, relatedColumn: PermissionColumn.View },
{ label: 'Create', key: ItemAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: ItemAction.View }] },
{ label: 'Edit', key: ItemAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: ItemAction.Create }], },
{ label: 'Delete', key: ItemAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: ItemAction.Edit }] },
],
},
{
label: intl.get('permissions.inventory_adjustment'),
subject: AbilitySubject.InventoryAdjustment,
permissions: [
{ label: 'View', key: ItemAction.View, relatedColumn: PermissionColumn.View },
{ label: 'Create', key: ItemAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: ItemAction.View }] },
{ label: 'Edit', key: ItemAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: ItemAction.Create }] },
{ label: 'Delete', key: ItemAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: ItemAction.Edit }] },
],
},
],
},
{
label: 'Contacts',
type: ModulePermissionsStyle.Columns,
serviceFullAccess: true,
moduleFullAccess: true,
columns: [
{ label: 'View', key: 'view' },
{ label: 'Create', key: 'create' },
{ label: 'Edit', key: 'edit' },
{ label: 'Delete', key: 'delete' },
],
services: [
{
label: 'Customers',
subject: AbilitySubject.Customer,
permissions: [
{ label: 'View', key: CustomerAction.View, relatedColumn: PermissionColumn.View, },
{ label: 'Create', key: CustomerAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: CustomerAction.View }] },
{ label: 'Edit', key: CustomerAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: CustomerAction.Create }] },
{ label: 'Delete', key: CustomerAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: CustomerAction.Edit }] },
],
},
{
label: 'Vendors',
subject: AbilitySubject.Vendor,
permissions: [
{
label: 'View',
key: VendorAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: VendorAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: VendorAction.View }]
},
{
label: 'Edit',
key: VendorAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: VendorAction.Create }]
},
{
label: 'Delete',
key: VendorAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: VendorAction.Edit }]
},
],
},
],
},
{
label: 'Sales',
type: ModulePermissionsStyle.Columns,
serviceFullAccess: true,
moduleFullAccess: true,
columns: [
{ label: 'View', key: 'view' },
{ label: 'Create', key: 'create' },
{ label: 'Edit', key: 'edit' },
{ label: 'Delete', key: 'delete' },
],
services: [
{
label: 'Sale Invoice',
subject: AbilitySubject.Invoice,
permissions: [
{
label: 'View',
key: SaleInvoiceAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: SaleInvoiceAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: SaleInvoiceAction.View }]
},
{
label: 'Edit',
key: SaleInvoiceAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: SaleInvoiceAction.Create }]
},
{
label: 'Delete',
key: SaleInvoiceAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: SaleInvoiceAction.Edit }]
},
{ label: 'Written-off invoice', key: SaleInvoiceAction.Writeoff, depend:[{ key: SaleInvoiceAction.Edit }] },
],
},
{
label: 'Sale Estimate',
subject: AbilitySubject.Estimate,
permissions: [
{ label: 'View', key: SaleEstimateAction.View, relatedColumn: PermissionColumn.View, },
{ label: 'Create', key: SaleEstimateAction.Create, relatedColumn: PermissionColumn.Create, depend:[{ key: SaleEstimateAction.View }] },
{ label: 'Edit', key: SaleEstimateAction.Edit, relatedColumn: PermissionColumn.Edit, depend:[{ key: SaleEstimateAction.Create }] },
{ label: 'Delete', key: SaleEstimateAction.Delete, relatedColumn: PermissionColumn.Delete, depend:[{ key: SaleEstimateAction.Edit }] },
],
},
{
label: 'Sale Receipt',
subject: AbilitySubject.Receipt,
permissions: [
{ label: 'View', key: SaleReceiptAction.View, relatedColumn: PermissionColumn.View, },
{
label: 'Create',
key: SaleReceiptAction.Create,
relatedColumn: PermissionColumn.Create,
depend:[{ key: SaleReceiptAction.View }]
},
{
label: 'Edit',
key: SaleReceiptAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend:[{ key: SaleReceiptAction.Create }]
},
{
label: 'Delete',
key: SaleReceiptAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend:[{ key: SaleReceiptAction.Edit }]
},
],
},
{
label: 'Credit note',
subject: AbilitySubject.CreditNote,
permissions: [
{ label: 'View', key: CreditNoteAction.View, relatedColumn: PermissionColumn.View },
{ label: 'Create', key: CreditNoteAction.Create, relatedColumn: PermissionColumn.Create, depend:[{ key: CreditNoteAction.View }] },
{ label: 'Edit', key: CreditNoteAction.Edit, relatedColumn: PermissionColumn.Edit, depend:[{ key: CreditNoteAction.Create }] },
{ label: 'Delete', key: CreditNoteAction.Delete, relatedColumn: PermissionColumn.Delete, depend:[{ key: CreditNoteAction.Edit }] },
{ label: 'Refund credit note', key: CreditNoteAction.Refund, depend:[{ key: CreditNoteAction.View }] },
],
},
{
label: 'Payment Receive',
subject: AbilitySubject.PaymentReceive,
permissions: [
{
label: 'View',
key: PaymentReceiveAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: PaymentReceiveAction.Create,
relatedColumn: PermissionColumn.Create,
depend:[{ key: PaymentReceiveAction.View }]
},
{
label: 'Edit',
key: PaymentReceiveAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend:[{ key: PaymentReceiveAction.Create }]
},
{
label: 'Delete',
key: PaymentReceiveAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend:[{ key: PaymentReceiveAction.Edit }]
},
],
},
],
},
{
label: 'Purchases',
type: ModulePermissionsStyle.Columns,
serviceFullAccess: true,
moduleFullAccess: true,
columns: [
{ label: 'View', key: 'view' },
{ label: 'Create', key: 'create' },
{ label: 'Edit', key: 'edit' },
{ label: 'Delete', key: 'delete' },
],
services: [
{
label: 'Bills',
subject: AbilitySubject.Bill,
permissions: [
{
label: 'View',
key: BillAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: BillAction.Create,
relatedColumn: PermissionColumn.Create,
depend:[{ key: BillAction.View }]
},
{
label: 'Edit',
key: BillAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend:[{ key: BillAction.Create }]
},
{
label: 'Delete',
key: BillAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend:[{ key: BillAction.Edit }]
},
],
},
{
label: 'Vendor Credits',
subject: AbilitySubject.VendorCredit,
permissions: [
{
label: 'View',
key: VendorCreditAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: VendorCreditAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: VendorCreditAction.View }]
},
{
label: 'Edit',
key: VendorCreditAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: VendorCreditAction.Create }]
},
{
label: 'Delete',
key: VendorCreditAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: VendorCreditAction.Edit }]
},
{ label: 'Refund vendor credit', key: VendorCreditAction.Refund, depend: [{ key: VendorCreditAction.View }] },
],
},
{
label: 'Payment Made',
subject: AbilitySubject.PaymentMade,
permissions: [
{
label: 'View',
key: PaymentMadeAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: PaymentMadeAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: PaymentMadeAction.View }]
},
{
label: 'Edit',
key: PaymentMadeAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: PaymentMadeAction.Create }]
},
{
label: 'Delete',
key: PaymentMadeAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: PaymentMadeAction.Edit }]
},
],
},
],
},
{
label: 'Financial Accounting',
type: ModulePermissionsStyle.Columns,
serviceFullAccess: true,
moduleFullAccess: true,
columns: [
{ label: 'View', key: 'view' },
{ label: 'Create', key: 'create' },
{ label: 'Edit', key: 'edit' },
{ label: 'Delete', key: 'delete' },
],
services: [
{
label: 'Manual Journals',
subject: AbilitySubject.ManualJournal,
permissions: [
{
label: 'View',
key: ManualJournalAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: ManualJournalAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: ManualJournalAction.View }]
},
{
label: 'Edit',
key: ManualJournalAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: ManualJournalAction.Create }]
},
{
label: 'Delete',
key: ManualJournalAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: ManualJournalAction.Edit }]
},
],
},
{
label: 'Chart of Accounts',
subject: AbilitySubject.Account,
permissions: [
{
label: 'View',
key: AccountAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: AccountAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: AccountAction.View }]
},
{
label: 'Edit',
key: AccountAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: AccountAction.Create }]
},
{
label: 'Delete',
key: AccountAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: AccountAction.Edit }]
},
{
label: 'Transactions locking',
key: AccountAction.TransactionsLocking,
},
],
},
{
label: 'Expenses',
subject: AbilitySubject.Expense,
permissions: [
{
label: 'View',
key: ExpenseAction.View,
relatedColumn: PermissionColumn.View,
},
{
label: 'Create',
key: ExpenseAction.Create,
relatedColumn: PermissionColumn.Create,
depend: [{ key: ExpenseAction.View }]
},
{
label: 'Edit',
key: ExpenseAction.Edit,
relatedColumn: PermissionColumn.Edit,
depend: [{ key: ExpenseAction.Create }]
},
{
label: 'Delete',
key: ExpenseAction.Delete,
relatedColumn: PermissionColumn.Delete,
depend: [{ key: ExpenseAction.Edit }]
},
],
},
],
},
{
label: 'Financial Reports',
type: ModulePermissionsStyle.Vertical,
serviceFullAccess: true,
moduleFullAccess: true,
services: [
{
label: 'Financial reprots',
subject: AbilitySubject.Report,
permissions: [
{ label: 'Balance sheet', key: ReportsAction.READ_BALANCE_SHEET },
{
label: 'Trial Balance sheet',
key: ReportsAction.READ_TRIAL_BALANCE_SHEET,
},
{ label: 'Profit & Loss sheet', key: ReportsAction.READ_PROFIT_LOSS },
{ label: 'Cash flow sheet', key: ReportsAction.READ_CASHFLOW },
{ label: 'Journal sheet', key: ReportsAction.READ_JOURNAL },
{ label: 'General ledger', key: ReportsAction.READ_GENERAL_LEDGET },
{
label: 'A/R Aging Summary report',
key: ReportsAction.READ_AR_AGING_SUMMARY,
},
{
label: 'A/P Aging Summary report',
key: ReportsAction.READ_AP_AGING_SUMMARY,
},
{
label: 'Purchases by items',
key: ReportsAction.READ_PURCHASES_BY_ITEMS,
},
{ label: 'Sales by items', key: ReportsAction.READ_SALES_BY_ITEMS },
{
label: 'Customers transactions',
key: ReportsAction.READ_CUSTOMERS_TRANSACTIONS,
},
{
label: 'Vendors transactions',
key: ReportsAction.READ_VENDORS_TRANSACTIONS,
},
{
label: 'Customers summary balance',
key: ReportsAction.READ_CUSTOMERS_SUMMARY_BALANCE,
},
{
label: 'Vendors summary balance',
key: ReportsAction.READ_VENDORS_SUMMARY_BALANCE,
},
{
label: 'Inventory valuation summary',
key: ReportsAction.READ_INVENTORY_VALUATION_SUMMARY,
},
{
label: 'Inventory items details',
key: ReportsAction.READ_INVENTORY_ITEM_DETAILS,
},
{
label: 'Cashflow account transactions',
key: ReportsAction.READ_CASHFLOW_ACCOUNT_TRANSACTION,
},
],
},
],
},
];
export function getPermissionsSchemaService(subject) {
const permissions = getPermissionsSchema();
return chain(permissions)
.map((perm) => perm.services)
.flatten()
.find((service) => service.subject === subject)
.value();
}
export function getPermissionsSchemaServices() {
const permissions = getPermissionsSchema();
return chain(permissions)
.map((module) => module.services)
.flatten()
.value();
}