- Consolidated JavaScript completion sources into a new module, improving organization and maintainability. - Updated the `fcTemplateLang` to utilize the new `javascriptCompletionSources` for enhanced autocomplete capabilities. - Removed redundant imports and streamlined the code in various components, including Invoices, Payments, TaxRecords, and Inventory sections, by replacing dropdown actions with a unified `ObjectActions` component. - Improved the handling of object actions across multiple inventory and finance components, enhancing user experience and code consistency.
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
export const applyPermissionSettingsList = (settingsList = []) => {
|
|
const permissions = {}
|
|
|
|
for (const setting of settingsList) {
|
|
const matrix = setting?.permissions
|
|
if (!matrix || typeof matrix !== 'object' || Array.isArray(matrix)) {
|
|
continue
|
|
}
|
|
|
|
for (const [modelName, actions] of Object.entries(matrix)) {
|
|
if (!actions || typeof actions !== 'object' || Array.isArray(actions)) {
|
|
continue
|
|
}
|
|
if (!permissions[modelName]) {
|
|
permissions[modelName] = {}
|
|
}
|
|
for (const [actionName, value] of Object.entries(actions)) {
|
|
if (value === true || value === false) {
|
|
permissions[modelName][actionName] = value
|
|
}
|
|
}
|
|
if (Object.keys(permissions[modelName]).length === 0) {
|
|
delete permissions[modelName]
|
|
}
|
|
}
|
|
}
|
|
|
|
return permissions
|
|
}
|
|
|
|
export const calculateUserPermissions = (objectData = {}) =>
|
|
applyPermissionSettingsList([
|
|
...(objectData.groups || []),
|
|
...(objectData.permissionSettings || [])
|
|
])
|
|
|
|
export const calculateUserGroupPermissions = (objectData = {}) =>
|
|
applyPermissionSettingsList(objectData.permissionSettings)
|
|
|
|
const PERMISSION_ACTION_ALIASES = {
|
|
cancelEdit: 'edit',
|
|
finishEdit: 'edit'
|
|
}
|
|
|
|
export const getPermissionActionName = (actionName) =>
|
|
PERMISSION_ACTION_ALIASES[actionName] || actionName
|
|
|
|
const isTopLevelModelAction = (model, actionName) =>
|
|
(model?.actions || []).some(
|
|
(action) =>
|
|
action?.name === actionName &&
|
|
action.type !== 'divider' &&
|
|
action.type !== 'alias' &&
|
|
action.type !== 'callback'
|
|
)
|
|
|
|
export const hasActionPermission = (userProfile, model, actionName) => {
|
|
if (!actionName) return true
|
|
|
|
const permissionAction = getPermissionActionName(actionName)
|
|
const isControlled =
|
|
Boolean(PERMISSION_ACTION_ALIASES[actionName]) ||
|
|
isTopLevelModelAction(model, actionName)
|
|
|
|
if (!isControlled) return true
|
|
|
|
const modelName = typeof model === 'string' ? model : model?.name
|
|
return userProfile?.permissions?.[modelName]?.[permissionAction] === true
|
|
}
|