PSA/ee/server/seeds/onboarding/algadesk/03_role_permissions.cjs
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

88 lines
4.1 KiB
JavaScript

exports.seed = async function (knex, tenantId) {
let tenants;
if (tenantId) {
tenants = [{ tenant: tenantId }];
} else {
tenants = await knex('tenants').where({ product_code: 'algadesk' }).select('tenant');
if (!tenants.length) {
console.log('No Algadesk tenants found, skipping role permissions seed');
return;
}
}
for (const { tenant } of tenants) {
const roles = await knex('roles').where({ tenant });
const permissions = await knex('permissions').where({ tenant });
const permissionMap = new Map();
permissions.forEach(p => {
const key = `${p.resource}:${p.action}:${p.msp ? 'msp' : 'client'}`;
permissionMap.set(key, p.permission_id);
});
await knex('role_permissions').where({ tenant }).del();
console.log(`Cleared existing Algadesk role permissions for tenant ${tenant}`);
for (const role of roles) {
let rolePermissionIds = [];
if (role.role_name === 'Admin' && role.msp === true) {
rolePermissionIds = permissions
.filter(p => p.msp === true)
.map(p => p.permission_id);
} else if (role.role_name === 'Agent' && role.msp === true) {
const agentPermissions = [
'client:read:msp',
'contact:read:msp',
'document:create:msp', 'document:read:msp', 'document:update:msp',
'profile:read:msp', 'profile:update:msp',
'reports:read:msp',
'tag:create:msp', 'tag:read:msp', 'tag:update:msp',
'ticket:create:msp', 'ticket:read:msp', 'ticket:update:msp',
'ticket_settings:read:msp',
'user:read:msp',
'user_settings:read:msp'
];
rolePermissionIds = agentPermissions
.map(key => permissionMap.get(key))
.filter(id => id !== undefined);
} else if (role.role_name === 'Admin' && role.client === true) {
const clientAdminPermissions = [
'client:read:client', 'client:update:client',
'contact:read:client', 'contact:update:client',
'document:create:client', 'document:read:client', 'document:update:client',
'settings:read:client', 'settings:update:client',
'ticket:create:client', 'ticket:read:client', 'ticket:update:client', 'ticket:delete:client',
'user:create:client', 'user:read:client', 'user:update:client', 'user:delete:client', 'user:reset_password:client'
];
rolePermissionIds = clientAdminPermissions
.map(key => permissionMap.get(key))
.filter(id => id !== undefined);
} else if (role.role_name === 'User' && role.client === true) {
const clientUserPermissions = [
'client:read:client',
'contact:read:client',
'document:create:client', 'document:read:client', 'document:update:client',
'ticket:create:client', 'ticket:read:client', 'ticket:update:client'
];
rolePermissionIds = clientUserPermissions
.map(key => permissionMap.get(key))
.filter(id => id !== undefined);
}
if (rolePermissionIds.length > 0) {
const rolePermissionsToAdd = rolePermissionIds.map(permissionId => ({
tenant,
role_id: role.role_id,
permission_id: permissionId
}));
await knex('role_permissions').insert(rolePermissionsToAdd);
console.log(`Added ${rolePermissionsToAdd.length} permissions to ${role.role_name} role (${role.msp ? 'MSP' : 'Client'}) for tenant ${tenant}`);
} else {
console.log(`No Algadesk permissions found for ${role.role_name} role (${role.msp ? 'MSP' : 'Client'}) for tenant ${tenant}`);
}
}
}
};