mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 04:34:06 -08:00
feat: Show warning message when removing last sharee that has access to credentials (no-changelog) (#4811)
* feat: add custom message when removing last credential accessor * chore: remove unused imports * chore: undo config schema changes * fix: remove hash from interface
This commit is contained in:
parent
c60e883640
commit
1fc17b5d81
|
@ -37,7 +37,6 @@ import {
|
|||
NodeParameterValueType,
|
||||
} from 'n8n-workflow';
|
||||
import { FAKE_DOOR_FEATURES } from './constants';
|
||||
import {ICredentialsDb} from "n8n";
|
||||
|
||||
export * from 'n8n-design-system/src/types';
|
||||
|
||||
|
@ -314,7 +313,7 @@ export interface IWorkflowDb {
|
|||
sharedWith?: Array<Partial<IUser>>;
|
||||
ownedBy?: Partial<IUser>;
|
||||
versionId: string;
|
||||
usedCredentials?: Array<Partial<ICredentialsDb>>;
|
||||
usedCredentials?: Array<Partial<ICredentialsResponse>>;
|
||||
}
|
||||
|
||||
// Identical to cli.Interfaces.ts
|
||||
|
|
|
@ -232,10 +232,45 @@ export default mixins(
|
|||
const user = this.usersStore.getUserById(userId)!;
|
||||
const isNewSharee = !(this.workflow.sharedWith || []).find((sharee) => sharee.id === userId);
|
||||
|
||||
const isLastUserWithAccessToCredentialsById = (this.workflow.usedCredentials || [])
|
||||
.reduce<Record<string, boolean>>((acc, credential) => {
|
||||
if (!credential.id || !credential.ownedBy || !credential.sharedWith || !this.workflow.sharedWith) {
|
||||
return acc;
|
||||
}
|
||||
|
||||
// if is credential owner, and no credential sharees have access to workflow => NOT OK
|
||||
// if is credential owner, and credential sharees have access to workflow => OK
|
||||
|
||||
// if is credential sharee, and no credential sharees have access to workflow or owner does not have access to workflow => NOT OK
|
||||
// if is credential sharee, and credential owner has access to workflow => OK
|
||||
// if is credential sharee, and other credential sharees have access to workflow => OK
|
||||
|
||||
let isLastUserWithAccess = false;
|
||||
|
||||
const isCredentialOwner = credential.ownedBy.id === user.id;
|
||||
const isCredentialSharee = !!credential.sharedWith.find((sharee) => sharee.id === user.id);
|
||||
|
||||
if (isCredentialOwner) {
|
||||
isLastUserWithAccess = !credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === sharee.id);
|
||||
});
|
||||
} else if (isCredentialSharee) {
|
||||
isLastUserWithAccess = !credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === sharee.id);
|
||||
}) && !this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === credential.ownedBy!.id);
|
||||
}
|
||||
|
||||
acc[credential.id] = isLastUserWithAccess;
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const isLastUserWithAccessToCredentials = Object.values(isLastUserWithAccessToCredentialsById).some((value) => value);
|
||||
|
||||
let confirm = true;
|
||||
if (!isNewSharee) {
|
||||
confirm = await this.confirmMessage(
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.message', {
|
||||
this.$locale.baseText(`workflows.shareModal.list.delete.confirm.${isLastUserWithAccessToCredentials ? 'lastUserWithAccessToCredentials.' : ''}message`, {
|
||||
interpolate: { name: user.fullName as string, workflow: this.workflow.name },
|
||||
}),
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.title', { interpolate: { name: user.fullName } }),
|
||||
|
|
|
@ -1388,7 +1388,8 @@
|
|||
"workflows.shareModal.select.placeholder": "Add people",
|
||||
"workflows.shareModal.list.delete": "Remove access",
|
||||
"workflows.shareModal.list.delete.confirm.title": "Remove {name}'s access?",
|
||||
"workflows.shareModal.list.delete.confirm.message": "<strong>This might cause the workflow to stop working:</strong> if {name} is the only user with access to credentials used in this workflow, those credentials will also be removed from {workflow}.",
|
||||
"workflows.shareModal.list.delete.confirm.message": "{name} will no longer have access to the workflow.",
|
||||
"workflows.shareModal.list.delete.confirm.lastUserWithAccessToCredentials.message": "<strong>This might cause the workflow to stop working:</strong> {name} is the only user with access to credentials used in this workflow, those credentials will also be removed from {workflow}.",
|
||||
"workflows.shareModal.list.delete.confirm.confirmButtonText": "Remove access",
|
||||
"workflows.shareModal.list.delete.confirm.cancelButtonText": "Cancel",
|
||||
"workflows.shareModal.onSave.success.title": "Workflow sharing settings have been saved",
|
||||
|
|
Loading…
Reference in a new issue