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

@@ -26,6 +26,8 @@ import {
import type { User } from '@/databases/entities/User';
import type { UserInvitationResult } from '../../shared/utils/users';
import { ProjectRepository } from '@/databases/repositories/project.repository';
import { ProjectRelationRepository } from '@/databases/repositories/projectRelation.repository';
describe('InvitationController', () => {
const mailer = mockInstance(UserManagementMailer);
@@ -36,9 +38,13 @@ describe('InvitationController', () => {
let instanceOwner: User;
let userRepository: UserRepository;
let projectRepository: ProjectRepository;
let projectRelationRepository: ProjectRelationRepository;
beforeAll(async () => {
userRepository = Container.get(UserRepository);
projectRepository = Container.get(ProjectRepository);
projectRelationRepository = Container.get(ProjectRelationRepository);
instanceOwner = await createOwner();
});
@@ -271,6 +277,39 @@ describe('InvitationController', () => {
assertStoredUserProps(storedUser);
});
test('should create personal project for shell account', async () => {
mailer.invite.mockResolvedValue({ emailSent: false });
const response: InvitationResponse = await testServer
.authAgentFor(instanceOwner)
.post('/invitations')
.send([{ email: randomEmail() }])
.expect(200);
const [result] = response.body.data;
const storedUser = await userRepository.findOneByOrFail({
id: result.user.id,
});
assertStoredUserProps(storedUser);
const projectRelation = await projectRelationRepository.findOneOrFail({
where: {
userId: storedUser.id,
role: 'project:personalOwner',
project: {
type: 'personal',
},
},
relations: { project: true },
});
expect(projectRelation).not.toBeUndefined();
expect(projectRelation.project.name).toBe(storedUser.createPersonalProjectName());
expect(projectRelation.project.type).toBe('personal');
});
test('should create admin shell when advanced permissions is licensed', async () => {
testServer.license.enable('feat:advancedPermissions');