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 { SharedWorkflow } from '@db/entities/SharedWorkflow';
|
||||
import type { User } from '@db/entities/User';
|
||||
import type { WorkflowEntity } from '@db/entities/WorkflowEntity';
|
||||
import type { WorkflowHistory } from '@db/entities/WorkflowHistory';
|
||||
@@ -18,28 +17,23 @@ export class WorkflowHistoryService {
|
||||
private readonly sharedWorkflowRepository: SharedWorkflowRepository,
|
||||
) {}
|
||||
|
||||
private async getSharedWorkflow(user: User, workflowId: string): Promise<SharedWorkflow | null> {
|
||||
return await this.sharedWorkflowRepository.findOne({
|
||||
where: {
|
||||
...(!user.hasGlobalScope('workflow:read') && { userId: user.id }),
|
||||
workflowId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async getList(
|
||||
user: User,
|
||||
workflowId: string,
|
||||
take: number,
|
||||
skip: number,
|
||||
): Promise<Array<Omit<WorkflowHistory, 'nodes' | 'connections'>>> {
|
||||
const sharedWorkflow = await this.getSharedWorkflow(user, workflowId);
|
||||
if (!sharedWorkflow) {
|
||||
const workflow = await this.sharedWorkflowRepository.findWorkflowForUser(workflowId, user, [
|
||||
'workflow:read',
|
||||
]);
|
||||
|
||||
if (!workflow) {
|
||||
throw new SharedWorkflowNotFoundError('');
|
||||
}
|
||||
|
||||
return await this.workflowHistoryRepository.find({
|
||||
where: {
|
||||
workflowId: sharedWorkflow.workflowId,
|
||||
workflowId: workflow.id,
|
||||
},
|
||||
take,
|
||||
skip,
|
||||
@@ -49,13 +43,17 @@ export class WorkflowHistoryService {
|
||||
}
|
||||
|
||||
async getVersion(user: User, workflowId: string, versionId: string): Promise<WorkflowHistory> {
|
||||
const sharedWorkflow = await this.getSharedWorkflow(user, workflowId);
|
||||
if (!sharedWorkflow) {
|
||||
const workflow = await this.sharedWorkflowRepository.findWorkflowForUser(workflowId, user, [
|
||||
'workflow:read',
|
||||
]);
|
||||
|
||||
if (!workflow) {
|
||||
throw new SharedWorkflowNotFoundError('');
|
||||
}
|
||||
|
||||
const hist = await this.workflowHistoryRepository.findOne({
|
||||
where: {
|
||||
workflowId: sharedWorkflow.workflowId,
|
||||
workflowId: workflow.id,
|
||||
versionId,
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user