mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2026-08-28 06:20:25 +02:00
refactor(core): Move more code into @n8n/permissions. Add aditional tests and docs (no-changelog) (#15062)
Co-authored-by: Danny Martini <danny@n8n.io>
This commit is contained in:
co-authored by
Danny Martini
parent
cdcd059248
commit
2bb190349b
@@ -1,20 +1,16 @@
|
||||
import type { SharedWorkflow, User } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { Scope } from '@n8n/permissions';
|
||||
import { hasGlobalScope, rolesWithScope, type Scope } from '@n8n/permissions';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import type { EntityManager, FindOptionsWhere } from '@n8n/typeorm';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import { In } from '@n8n/typeorm';
|
||||
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { RoleService } from '@/services/role.service';
|
||||
|
||||
@Service()
|
||||
export class WorkflowFinderService {
|
||||
constructor(
|
||||
private readonly sharedWorkflowRepository: SharedWorkflowRepository,
|
||||
private readonly roleService: RoleService,
|
||||
) {}
|
||||
constructor(private readonly sharedWorkflowRepository: SharedWorkflowRepository) {}
|
||||
|
||||
async findWorkflowForUser(
|
||||
workflowId: string,
|
||||
@@ -28,9 +24,9 @@ export class WorkflowFinderService {
|
||||
) {
|
||||
let where: FindOptionsWhere<SharedWorkflow> = {};
|
||||
|
||||
if (!user.hasGlobalScope(scopes, { mode: 'allOf' })) {
|
||||
const projectRoles = this.roleService.rolesWithScope('project', scopes);
|
||||
const workflowRoles = this.roleService.rolesWithScope('workflow', scopes);
|
||||
if (!hasGlobalScope(user, scopes, { mode: 'allOf' })) {
|
||||
const projectRoles = rolesWithScope('project', scopes);
|
||||
const workflowRoles = rolesWithScope('workflow', scopes);
|
||||
|
||||
where = {
|
||||
role: In(workflowRoles),
|
||||
@@ -60,9 +56,9 @@ export class WorkflowFinderService {
|
||||
async findAllWorkflowsForUser(user: User, scopes: Scope[]) {
|
||||
let where: FindOptionsWhere<SharedWorkflow> = {};
|
||||
|
||||
if (!user.hasGlobalScope(scopes, { mode: 'allOf' })) {
|
||||
const projectRoles = this.roleService.rolesWithScope('project', scopes);
|
||||
const workflowRoles = this.roleService.rolesWithScope('workflow', scopes);
|
||||
if (!hasGlobalScope(user, scopes, { mode: 'allOf' })) {
|
||||
const projectRoles = rolesWithScope('project', scopes);
|
||||
const workflowRoles = rolesWithScope('workflow', scopes);
|
||||
|
||||
where = {
|
||||
...where,
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import type { ProjectRole } from '@n8n/api-types';
|
||||
import type { WorkflowSharingRole, User } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { Scope } from '@n8n/permissions';
|
||||
import {
|
||||
hasGlobalScope,
|
||||
rolesWithScope,
|
||||
type ProjectRole,
|
||||
type WorkflowSharingRole,
|
||||
type Scope,
|
||||
} from '@n8n/permissions';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import { In } from '@n8n/typeorm';
|
||||
|
||||
@@ -33,7 +38,7 @@ export class WorkflowSharingService {
|
||||
async getSharedWorkflowIds(user: User, options: ShareWorkflowOptions): Promise<string[]> {
|
||||
const { projectId } = options;
|
||||
|
||||
if (user.hasGlobalScope('workflow:read')) {
|
||||
if (hasGlobalScope(user, 'workflow:read')) {
|
||||
const sharedWorkflows = await this.sharedWorkflowRepository.find({
|
||||
select: ['workflowId'],
|
||||
...(projectId && { where: { projectId } }),
|
||||
@@ -42,13 +47,9 @@ export class WorkflowSharingService {
|
||||
}
|
||||
|
||||
const projectRoles =
|
||||
'scopes' in options
|
||||
? this.roleService.rolesWithScope('project', options.scopes)
|
||||
: options.projectRoles;
|
||||
'scopes' in options ? rolesWithScope('project', options.scopes) : options.projectRoles;
|
||||
const workflowRoles =
|
||||
'scopes' in options
|
||||
? this.roleService.rolesWithScope('workflow', options.scopes)
|
||||
: options.workflowRoles;
|
||||
'scopes' in options ? rolesWithScope('workflow', options.scopes) : options.workflowRoles;
|
||||
|
||||
const sharedWorkflows = await this.sharedWorkflowRepository.find({
|
||||
where: {
|
||||
|
||||
Reference in New Issue
Block a user