import { client } from './client'; import { Action, OnCreator, TYPE } from './constants'; export async function getAll(): Promise { return client.roles.all(); } interface Permission { itemType: TYPE; action: Action; onCreator: OnCreator; } export const positiveBasePermissions: Permission[] = [ { itemType: null, action: 'update', onCreator: 'anyone' }, { itemType: TYPE.product, action: 'create', onCreator: null }, { itemType: TYPE.contentPage, action: 'create', onCreator: null }, { itemType: TYPE.product, action: 'read', onCreator: 'role' }, { itemType: TYPE.globalButton, action: 'read', onCreator: 'role' }, { itemType: TYPE.fontOption, action: 'read', onCreator: 'anyone' }, { itemType: TYPE.colourOption, action: 'read', onCreator: 'anyone' }, { itemType: TYPE.themeConfiguration, action: 'read', onCreator: 'role' }, { itemType: TYPE.contentPage, action: 'delete', onCreator: 'role' }, { itemType: TYPE.contentPage, action: 'read', onCreator: 'role' }, { itemType: TYPE.headerLayout, action: 'read', onCreator: 'role' }, { itemType: TYPE.footerLayout, action: 'read', onCreator: 'role' }, { itemType: TYPE.siteConfig, action: 'read', onCreator: 'role' }, { itemType: TYPE.merchant, action: 'read', onCreator: 'role' } ]; const negativeBasePermissions: Permission[] = [ { action: 'create', itemType: TYPE.merchant, onCreator: null } ]; export async function get(projectId: string): Promise { const allRoles = await getAll(); const role = allRoles.find((foundRole: any) => { return foundRole.name === projectId; }); if (role) { console.log('got role for projectId', projectId); } else { console.error('Couldnt find role for projectId', projectId); } return role; } export function generateRoleObject(name: string, environmentId: string): any { const permissions = [{ itemType: null, action: 'all', onCreator: 'anyone' }]; return { name, canEditSchema: false, canEditSite: false, canEditFavicon: false, canManageUsers: false, canManageSharedFilters: false, canManageAccessTokens: false, canPerformSiteSearch: false, canManageWebhooks: false, canManageDeploymentEnvironments: false, positiveItemTypePermissions: permissions, negativeDeploymentEnvironmentPermissions: [], negativeItemTypePermissions: [], positiveDeploymentEnvironmentPermissions: [ { deploymentEnvironment: environmentId.toString() } ] }; } export async function create(name: string, environmentId: string): Promise { console.log('role::create', name, environmentId); const roleObject = generateRoleObject(name, environmentId); console.log(JSON.stringify(roleObject, null, 4)); const result = await client.roles.create(roleObject); console.log('role', JSON.stringify(result)); return result; } export async function remove(projectId: string): Promise { const role = await get(projectId); if (role) { return client.roles.destroy(role.id); } else { return 'No role for projectId'; } } export async function reducePermissions(projectId: string): Promise { console.log('role::reducePermissions', projectId); const role = await get(projectId); role.positiveItemTypePermissions = positiveBasePermissions; role.negativeItemTypePermissions = negativeBasePermissions; const result = await client.roles.update(role.id, role); return result; }