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>
65 lines
1.8 KiB
TypeScript
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 ?? []),
|
|
);
|