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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user