Files
Automata/packages/editor-ui/src/permissions.ts
Csaba Tuncsik 596c472ecc feat: RBAC (#8922)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: Val <68596159+valya@users.noreply.github.com>
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
Co-authored-by: Valya Bullions <valya@n8n.io>
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Danny Martini <despair.blue@gmail.com>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Omar Ajoue <krynble@gmail.com>
Co-authored-by: oleg <me@olegivaniv.com>
Co-authored-by: Michael Kret <michael.k@radency.com>
Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com>
Co-authored-by: Elias Meire <elias@meire.dev>
Co-authored-by: Giulio Andreini <andreini@netseven.it>
Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: Ayato Hayashi <go12limchangyong@gmail.com>
2024-05-17 10:53:15 +02:00

65 lines
1.8 KiB
TypeScript

import type { IUser, ICredentialsResponse, IWorkflowDb } from '@/Interface';
import type {
CredentialScope,
ProjectScope,
Scope,
WorkflowScope,
VariableScope,
} from '@n8n/permissions';
import type { Project } from './features/projects/projects.types';
type ExtractAfterColon<T> = T extends `${infer _Prefix}:${infer Suffix}` ? Suffix : never;
export type PermissionsMap<T> = {
[K in ExtractAfterColon<T>]: boolean;
};
const mapScopesToPermissions = (scopes: Scope[], scopeSet: Set<Scope>): PermissionsMap<Scope> =>
scopes.reduce(
(permissions: PermissionsMap<Scope>, scope: Scope) => ({
...permissions,
[scope.split(':')[1]]: scopeSet.has(scope),
}),
{} as PermissionsMap<Scope>,
);
export const getCredentialPermissions = (
credential: ICredentialsResponse,
): PermissionsMap<CredentialScope> =>
mapScopesToPermissions(
[
'credential:create',
'credential:read',
'credential:update',
'credential:delete',
'credential:list',
'credential:share',
],
new Set(credential?.scopes ?? []),
);
export const getWorkflowPermissions = (workflow: IWorkflowDb): PermissionsMap<WorkflowScope> =>
mapScopesToPermissions(
[
'workflow:create',
'workflow:read',
'workflow:update',
'workflow:delete',
'workflow:list',
'workflow:share',
'workflow:execute',
],
new Set(workflow?.scopes ?? []),
);
export const getProjectPermissions = (project: Project | null): PermissionsMap<ProjectScope> =>
mapScopesToPermissions(
['project:create', 'project:read', 'project:update', 'project:delete', 'project:list'],
new Set(project?.scopes ?? []),
);
export const getVariablesPermissions = (user: IUser | null): PermissionsMap<VariableScope> =>
mapScopesToPermissions(
['variable:create', 'variable:read', 'variable:update', 'variable:delete', 'variable:list'],
new Set(user?.globalScopes ?? []),
);