mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 06:40:31 +00:00
Merge branch 'develop' of https://github.com/bigcapitalhq/client into develop
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
"cross-env": "^7.0.2",
|
"cross-env": "^7.0.2",
|
||||||
"css-loader": "3.4.2",
|
"css-loader": "3.4.2",
|
||||||
"deep-map-keys": "^2.0.1",
|
"deep-map-keys": "^2.0.1",
|
||||||
|
"dependency-graph": "^0.11.0",
|
||||||
"dotenv": "8.2.0",
|
"dotenv": "8.2.0",
|
||||||
"dotenv-expand": "5.1.0",
|
"dotenv-expand": "5.1.0",
|
||||||
"eslint": "^6.6.0",
|
"eslint": "^6.6.0",
|
||||||
|
|||||||
@@ -47,52 +47,20 @@ export const permissions = [
|
|||||||
label: 'Items',
|
label: 'Items',
|
||||||
subject: AbilitySubject.Item,
|
subject: AbilitySubject.Item,
|
||||||
permissions: [
|
permissions: [
|
||||||
{
|
{ label: 'View', key: ItemAction.View, relatedColumn: PermissionColumn.View },
|
||||||
label: 'View',
|
{ label: 'Create', key: ItemAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: ItemAction.View }] },
|
||||||
key: ItemAction.View,
|
{ label: 'Edit', key: ItemAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: ItemAction.Create }], },
|
||||||
relatedColumn: PermissionColumn.View,
|
{ label: 'Delete', key: ItemAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: ItemAction.Edit }] },
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Create',
|
|
||||||
key: ItemAction.Create,
|
|
||||||
relatedColumn: PermissionColumn.Create,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Edit',
|
|
||||||
key: ItemAction.Edit,
|
|
||||||
relatedColumn: PermissionColumn.Edit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Delete',
|
|
||||||
key: ItemAction.Delete,
|
|
||||||
relatedColumn: PermissionColumn.Delete,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Inventory adjustments',
|
label: 'Inventory adjustments',
|
||||||
subject: AbilitySubject.InventoryAdjustment,
|
subject: AbilitySubject.InventoryAdjustment,
|
||||||
permissions: [
|
permissions: [
|
||||||
{
|
{ label: 'View', key: ItemAction.View, relatedColumn: PermissionColumn.View },
|
||||||
label: 'View',
|
{ label: 'Create', key: ItemAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: ItemAction.View }] },
|
||||||
key: ItemAction.View,
|
{ label: 'Edit', key: ItemAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: ItemAction.Create }] },
|
||||||
relatedColumn: PermissionColumn.View,
|
{ label: 'Delete', key: ItemAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: ItemAction.Edit }] },
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Create',
|
|
||||||
key: ItemAction.Create,
|
|
||||||
relatedColumn: PermissionColumn.Create,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Edit',
|
|
||||||
key: ItemAction.Edit,
|
|
||||||
relatedColumn: PermissionColumn.Edit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Delete',
|
|
||||||
key: ItemAction.Delete,
|
|
||||||
relatedColumn: PermissionColumn.Delete,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -113,26 +81,10 @@ export const permissions = [
|
|||||||
label: 'Customers',
|
label: 'Customers',
|
||||||
subject: AbilitySubject.Customer,
|
subject: AbilitySubject.Customer,
|
||||||
permissions: [
|
permissions: [
|
||||||
{
|
{ label: 'View', key: CustomerAction.View, relatedColumn: PermissionColumn.View, },
|
||||||
label: 'View',
|
{ label: 'Create', key: CustomerAction.Create, relatedColumn: PermissionColumn.Create, depend: [{ key: CustomerAction.View }] },
|
||||||
key: CustomerAction.View,
|
{ label: 'Edit', key: CustomerAction.Edit, relatedColumn: PermissionColumn.Edit, depend: [{ key: CustomerAction.Create }] },
|
||||||
relatedColumn: PermissionColumn.View,
|
{ label: 'Delete', key: CustomerAction.Delete, relatedColumn: PermissionColumn.Delete, depend: [{ key: CustomerAction.Edit }] },
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Create',
|
|
||||||
key: CustomerAction.Create,
|
|
||||||
relatedColumn: PermissionColumn.Create,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Edit',
|
|
||||||
key: CustomerAction.Edit,
|
|
||||||
relatedColumn: PermissionColumn.Edit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Delete',
|
|
||||||
key: CustomerAction.Delete,
|
|
||||||
relatedColumn: PermissionColumn.Delete,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -148,16 +100,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: VendorAction.Create,
|
key: VendorAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: VendorAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: VendorAction.Edit,
|
key: VendorAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: VendorAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: VendorAction.Delete,
|
key: VendorAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: VendorAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -188,44 +143,31 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: SaleInvoiceAction.Create,
|
key: SaleInvoiceAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: SaleInvoiceAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: SaleInvoiceAction.Edit,
|
key: SaleInvoiceAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: SaleInvoiceAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: SaleInvoiceAction.Delete,
|
key: SaleInvoiceAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: SaleInvoiceAction.Edit }]
|
||||||
},
|
},
|
||||||
{ label: 'Written-off invoice', key: SaleInvoiceAction.Writeoff },
|
{ label: 'Written-off invoice', key: SaleInvoiceAction.Writeoff, depend:[{ key: SaleInvoiceAction.Edit }] },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Sale Estimate',
|
label: 'Sale Estimate',
|
||||||
subject: AbilitySubject.Estimate,
|
subject: AbilitySubject.Estimate,
|
||||||
permissions: [
|
permissions: [
|
||||||
{
|
{ label: 'View', key: SaleEstimateAction.View, relatedColumn: PermissionColumn.View, },
|
||||||
label: 'View',
|
{ label: 'Create', key: SaleEstimateAction.Create, relatedColumn: PermissionColumn.Create, depend:[{ key: SaleEstimateAction.View }] },
|
||||||
key: SaleEstimateAction.View,
|
{ label: 'Edit', key: SaleEstimateAction.Edit, relatedColumn: PermissionColumn.Edit, depend:[{ key: SaleEstimateAction.Create }] },
|
||||||
relatedColumn: PermissionColumn.View,
|
{ label: 'Delete', key: SaleEstimateAction.Delete, relatedColumn: PermissionColumn.Delete, depend:[{ key: SaleEstimateAction.Edit }] },
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Create',
|
|
||||||
key: SaleEstimateAction.Create,
|
|
||||||
relatedColumn: PermissionColumn.Create,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Edit',
|
|
||||||
key: SaleEstimateAction.Edit,
|
|
||||||
relatedColumn: PermissionColumn.Edit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Delete',
|
|
||||||
key: SaleEstimateAction.Delete,
|
|
||||||
relatedColumn: PermissionColumn.Delete,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -241,16 +183,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: SaleReceiptAction.Create,
|
key: SaleReceiptAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend:[{ key: SaleReceiptAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: SaleReceiptAction.Edit,
|
key: SaleReceiptAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend:[{ key: SaleReceiptAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: SaleReceiptAction.Delete,
|
key: SaleReceiptAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend:[{ key: SaleReceiptAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -258,27 +203,11 @@ export const permissions = [
|
|||||||
label: 'Credit note',
|
label: 'Credit note',
|
||||||
subject: AbilitySubject.CreditNote,
|
subject: AbilitySubject.CreditNote,
|
||||||
permissions: [
|
permissions: [
|
||||||
{
|
{ label: 'View', key: CreditNoteAction.View, relatedColumn: PermissionColumn.View },
|
||||||
label: 'View',
|
{ label: 'Create', key: CreditNoteAction.Create, relatedColumn: PermissionColumn.Create, depend:[{ key: CreditNoteAction.View }] },
|
||||||
key: CreditNoteAction.View,
|
{ label: 'Edit', key: CreditNoteAction.Edit, relatedColumn: PermissionColumn.Edit, depend:[{ key: CreditNoteAction.Create }] },
|
||||||
relatedColumn: PermissionColumn.View,
|
{ label: 'Delete', key: CreditNoteAction.Delete, relatedColumn: PermissionColumn.Delete, depend:[{ key: CreditNoteAction.Edit }] },
|
||||||
},
|
{ label: 'Refund credit note', key: CreditNoteAction.Refund, depend:[{ key: CreditNoteAction.View }] },
|
||||||
{
|
|
||||||
label: 'Create',
|
|
||||||
key: CreditNoteAction.Create,
|
|
||||||
relatedColumn: PermissionColumn.Create,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Edit',
|
|
||||||
key: CreditNoteAction.Edit,
|
|
||||||
relatedColumn: PermissionColumn.Edit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Delete',
|
|
||||||
key: CreditNoteAction.Delete,
|
|
||||||
relatedColumn: PermissionColumn.Delete,
|
|
||||||
},
|
|
||||||
{ label: 'Refund credit note', key: CreditNoteAction.Refund },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -294,16 +223,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: PaymentReceiveAction.Create,
|
key: PaymentReceiveAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend:[{ key: PaymentReceiveAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: PaymentReceiveAction.Edit,
|
key: PaymentReceiveAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend:[{ key: PaymentReceiveAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: PaymentReceiveAction.Delete,
|
key: PaymentReceiveAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend:[{ key: PaymentReceiveAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -334,16 +266,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: BillAction.Create,
|
key: BillAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend:[{ key: BillAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: BillAction.Edit,
|
key: BillAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend:[{ key: BillAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: BillAction.Delete,
|
key: BillAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend:[{ key: BillAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -360,18 +295,21 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: VendorCreditAction.Create,
|
key: VendorCreditAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: VendorCreditAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: VendorCreditAction.Edit,
|
key: VendorCreditAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: VendorCreditAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: VendorCreditAction.Delete,
|
key: VendorCreditAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: VendorCreditAction.Edit }]
|
||||||
},
|
},
|
||||||
{ label: 'Refund vendor credit', key: VendorCreditAction.Refund },
|
{ label: 'Refund vendor credit', key: VendorCreditAction.Refund, depend: [{ key: VendorCreditAction.View }] },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -387,16 +325,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: PaymentMadeAction.Create,
|
key: PaymentMadeAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: PaymentMadeAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: PaymentMadeAction.Edit,
|
key: PaymentMadeAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: PaymentMadeAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: PaymentMadeAction.Delete,
|
key: PaymentMadeAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: PaymentMadeAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -427,16 +368,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: ManualJournalAction.Create,
|
key: ManualJournalAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: ManualJournalAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: ManualJournalAction.Edit,
|
key: ManualJournalAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: ManualJournalAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: ManualJournalAction.Delete,
|
key: ManualJournalAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: ManualJournalAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -453,16 +397,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: AccountAction.Create,
|
key: AccountAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: AccountAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: AccountAction.Edit,
|
key: AccountAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: AccountAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: AccountAction.Delete,
|
key: AccountAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: AccountAction.Edit }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Transactions locking',
|
label: 'Transactions locking',
|
||||||
@@ -483,16 +430,19 @@ export const permissions = [
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
key: ExpenseAction.Create,
|
key: ExpenseAction.Create,
|
||||||
relatedColumn: PermissionColumn.Create,
|
relatedColumn: PermissionColumn.Create,
|
||||||
|
depend: [{ key: ExpenseAction.View }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
key: ExpenseAction.Edit,
|
key: ExpenseAction.Edit,
|
||||||
relatedColumn: PermissionColumn.Edit,
|
relatedColumn: PermissionColumn.Edit,
|
||||||
|
depend: [{ key: ExpenseAction.Create }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Delete',
|
label: 'Delete',
|
||||||
key: ExpenseAction.Delete,
|
key: ExpenseAction.Delete,
|
||||||
relatedColumn: PermissionColumn.Delete,
|
relatedColumn: PermissionColumn.Delete,
|
||||||
|
depend: [{ key: ExpenseAction.Edit }]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { chain } from 'lodash';
|
import { chain, isEmpty, castArray, memoize } from 'lodash';
|
||||||
import * as R from 'ramda';
|
import * as R from 'ramda';
|
||||||
|
import { DepGraph } from 'dependency-graph';
|
||||||
import {
|
import {
|
||||||
|
permissions as PERMISSIONS_SCHEMA,
|
||||||
getPermissionsSchemaService,
|
getPermissionsSchemaService,
|
||||||
getPermissionsSchemaServices,
|
getPermissionsSchemaServices,
|
||||||
} from 'common/permissionsSchema';
|
} from 'common/permissionsSchema';
|
||||||
@@ -176,11 +178,23 @@ export const handleCheckboxPermissionChange = R.curry(
|
|||||||
(form, permission, service, event) => {
|
(form, permission, service, event) => {
|
||||||
const { subject } = service;
|
const { subject } = service;
|
||||||
const isChecked = event.currentTarget.checked;
|
const isChecked = event.currentTarget.checked;
|
||||||
|
|
||||||
|
const permissionsGraph = memoizedPermissionsGraph();
|
||||||
|
const dependencies = isChecked
|
||||||
|
? permissionsGraph.dependenciesOf(`${subject}/${permission.key}`)
|
||||||
|
: permissionsGraph.dependantsOf(`${subject}/${permission.key}`);
|
||||||
|
|
||||||
|
const newDependsPermiss = chain(dependencies)
|
||||||
|
.map((dep) => [dep, isChecked])
|
||||||
|
.fromPairs()
|
||||||
|
.value();
|
||||||
|
|
||||||
const newValues = {
|
const newValues = {
|
||||||
...form.values,
|
...form.values,
|
||||||
permissions: {
|
permissions: {
|
||||||
...form.values.permissions,
|
...form.values.permissions,
|
||||||
[`${subject}/${permission.key}`]: isChecked,
|
[`${subject}/${permission.key}`]: isChecked,
|
||||||
|
...newDependsPermiss,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const isFullChecked = isServiceFullChecked(subject, newValues.permissions);
|
const isFullChecked = isServiceFullChecked(subject, newValues.permissions);
|
||||||
@@ -193,6 +207,10 @@ export const handleCheckboxPermissionChange = R.curry(
|
|||||||
`serviceFullAccess.${subject}`,
|
`serviceFullAccess.${subject}`,
|
||||||
detarmineCheckboxState(isFullChecked, isFullUnchecked),
|
detarmineCheckboxState(isFullChecked, isFullUnchecked),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
dependencies.forEach((depKey) => {
|
||||||
|
form.setFieldValue(`permissions.${depKey}`, isChecked);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -243,3 +261,50 @@ export const handleCheckboxFullAccessChange = R.curry(
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all flatten modules permissions.
|
||||||
|
*/
|
||||||
|
export function getAllFlattenPermissionsSchema() {
|
||||||
|
return chain(PERMISSIONS_SCHEMA)
|
||||||
|
.map((module) => module.services)
|
||||||
|
.flatten()
|
||||||
|
.map((module) =>
|
||||||
|
module.permissions.map((permission) => ({
|
||||||
|
subject: module.subject,
|
||||||
|
...permission,
|
||||||
|
})),
|
||||||
|
)
|
||||||
|
.flatten()
|
||||||
|
.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the permissions schema dependencies graph.
|
||||||
|
* @returns {DepGraph}
|
||||||
|
*/
|
||||||
|
export const getPermissionsSchemaGraph = () => {
|
||||||
|
const graph = new DepGraph();
|
||||||
|
const permissions = getAllFlattenPermissionsSchema();
|
||||||
|
|
||||||
|
permissions.forEach((permission) => {
|
||||||
|
graph.addNode(`${permission.subject}/${permission.key}`, permission);
|
||||||
|
});
|
||||||
|
const nodesOrder = graph.overallOrder();
|
||||||
|
|
||||||
|
nodesOrder.forEach((key) => {
|
||||||
|
const node = graph.getNodeData(key);
|
||||||
|
|
||||||
|
if (isEmpty(node.depend)) return;
|
||||||
|
|
||||||
|
const depends = castArray(node.depend);
|
||||||
|
|
||||||
|
depends.forEach((dependRelation) => {
|
||||||
|
const subject = dependRelation.subject || node.subject;
|
||||||
|
graph.addDependency(key, `${subject}/${dependRelation.key}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return graph;
|
||||||
|
};
|
||||||
|
|
||||||
|
const memoizedPermissionsGraph = memoize(getPermissionsSchemaGraph);
|
||||||
|
|||||||
Reference in New Issue
Block a user