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>
This commit is contained in:
Csaba Tuncsik
2024-05-17 10:53:15 +02:00
committed by GitHub
parent b1f977ebd0
commit 596c472ecc
292 changed files with 14129 additions and 3989 deletions

View File

@@ -1,4 +1,3 @@
import type { IUser } from '../Interface';
import { setWorkflowSharedWith } from '@/api/workflows.ee';
import { EnterpriseEditionFeature, STORES } from '@/constants';
import { useRootStore } from '@/stores/n8nRoot.store';
@@ -6,6 +5,8 @@ import { useSettingsStore } from '@/stores/settings.store';
import { defineStore } from 'pinia';
import { useWorkflowsStore } from '@/stores/workflows.store';
import { i18n } from '@/plugins/i18n';
import type { ProjectSharingData } from '@/features/projects/projects.types';
import { splitName } from '@/features/projects/projects.utils';
export const useWorkflowsEEStore = defineStore(STORES.WORKFLOWS_EE, {
state() {
@@ -18,62 +19,32 @@ export const useWorkflowsEEStore = defineStore(STORES.WORKFLOWS_EE, {
fallback = i18n.baseText('workflows.shareModal.info.sharee.fallback'),
): string => {
const workflow = useWorkflowsStore().getWorkflowById(workflowId);
return workflow?.ownedBy?.firstName
? `${workflow.ownedBy.firstName} ${workflow.ownedBy.lastName} (${workflow.ownedBy.email})`
const { firstName, lastName, email } = splitName(workflow?.homeProject?.name ?? '');
return workflow?.homeProject?.name
? `${firstName} ${lastName ?? ''} ${email ? `(${email})` : ''}`
: fallback;
};
},
},
actions: {
setWorkflowOwnedBy(payload: { workflowId: string; ownedBy: Partial<IUser> }): void {
const workflowsStore = useWorkflowsStore();
workflowsStore.workflowsById[payload.workflowId] = {
...workflowsStore.workflowsById[payload.workflowId],
ownedBy: payload.ownedBy,
};
workflowsStore.workflow = {
...workflowsStore.workflow,
ownedBy: payload.ownedBy,
};
},
setWorkflowSharedWith(payload: {
workflowId: string;
sharedWith: Array<Partial<IUser>>;
sharedWithProjects: ProjectSharingData[];
}): void {
const workflowsStore = useWorkflowsStore();
workflowsStore.workflowsById[payload.workflowId] = {
...workflowsStore.workflowsById[payload.workflowId],
sharedWith: payload.sharedWith,
sharedWithProjects: payload.sharedWithProjects,
};
workflowsStore.workflow = {
...workflowsStore.workflow,
sharedWith: payload.sharedWith,
};
},
addWorkflowSharee(payload: { workflowId: string; sharee: Partial<IUser> }): void {
const workflowsStore = useWorkflowsStore();
workflowsStore.workflowsById[payload.workflowId] = {
...workflowsStore.workflowsById[payload.workflowId],
sharedWith: (workflowsStore.workflowsById[payload.workflowId].sharedWith || []).concat([
payload.sharee,
]),
};
},
removeWorkflowSharee(payload: { workflowId: string; sharee: Partial<IUser> }): void {
const workflowsStore = useWorkflowsStore();
workflowsStore.workflowsById[payload.workflowId] = {
...workflowsStore.workflowsById[payload.workflowId],
sharedWith: (workflowsStore.workflowsById[payload.workflowId].sharedWith || []).filter(
(sharee) => sharee.id !== payload.sharee.id,
),
sharedWithProjects: payload.sharedWithProjects,
};
},
async saveWorkflowSharedWith(payload: {
sharedWith: Array<Partial<IUser>>;
sharedWithProjects: ProjectSharingData[];
workflowId: string;
}): Promise<void> {
const rootStore = useRootStore();
@@ -81,7 +52,7 @@ export const useWorkflowsEEStore = defineStore(STORES.WORKFLOWS_EE, {
if (settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.Sharing)) {
await setWorkflowSharedWith(rootStore.getRestApiContext, payload.workflowId, {
shareWithIds: payload.sharedWith.map((sharee) => sharee.id as string),
shareWithIds: payload.sharedWithProjects.map((p) => p.id),
});
this.setWorkflowSharedWith(payload);