berechtigungen
This commit is contained in:
@@ -25,6 +25,7 @@ export type LOGEVENT =
|
||||
| 'penalty_catalog_create'
|
||||
| 'penalty_catalog_update'
|
||||
| 'penalty_catalog_delete'
|
||||
| 'team_create';
|
||||
| 'team_create'
|
||||
| 'team_permissions_update';
|
||||
|
||||
export type LOGLEVEL = 'FATAL' | 'ERROR' | 'WARN' | 'INFO' | 'DEBUG' | 'TRACE';
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
const BACKFILLED_KEYS = [
|
||||
'invite_min_role',
|
||||
'member_manage_min_role',
|
||||
'penalty_manage_min_role',
|
||||
'public_access_manage_min_role',
|
||||
] as const;
|
||||
|
||||
export class AddTeamPermissionSettings1785524400000
|
||||
implements MigrationInterface
|
||||
{
|
||||
name = 'AddTeamPermissionSettings1785524400000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
for (const key of BACKFILLED_KEYS) {
|
||||
await queryRunner.query(
|
||||
`INSERT INTO "team_setting" ("teamId", "key", "value")
|
||||
SELECT "id", '${key}', '3' FROM "team"
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM "team_setting" ts
|
||||
WHERE ts."teamId" = "team"."id" AND ts."key" = '${key}'
|
||||
)`,
|
||||
);
|
||||
}
|
||||
|
||||
await queryRunner.query(
|
||||
`INSERT INTO "team_setting" ("teamId", "key", "value")
|
||||
SELECT "teamId", 'transaction_reverse_min_role', "value" FROM "team_setting"
|
||||
WHERE "key" = 'transaction_create_min_role'
|
||||
AND "teamId" NOT IN (
|
||||
SELECT "teamId" FROM "team_setting" WHERE "key" = 'transaction_reverse_min_role'
|
||||
)`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`DELETE FROM "team_setting" WHERE "key" IN (
|
||||
'transaction_reverse_min_role',
|
||||
'invite_min_role',
|
||||
'member_manage_min_role',
|
||||
'penalty_manage_min_role',
|
||||
'public_access_manage_min_role'
|
||||
)`,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
describe('AddTeamPermissionSettings1785524400000', () => {
|
||||
it('backfills the new min-role settings for existing teams idempotently', async () => {
|
||||
const migrationModule = require('./1785524400000-AddTeamPermissionSettings');
|
||||
const migration =
|
||||
new migrationModule.AddTeamPermissionSettings1785524400000();
|
||||
const queryRunner = { query: jest.fn() } as any;
|
||||
|
||||
await migration.up(queryRunner);
|
||||
|
||||
const calls: string[] = queryRunner.query.mock.calls.map((c: any) => c[0]);
|
||||
expect(calls).toHaveLength(5);
|
||||
for (const key of [
|
||||
'invite_min_role',
|
||||
'member_manage_min_role',
|
||||
'penalty_manage_min_role',
|
||||
'public_access_manage_min_role',
|
||||
]) {
|
||||
expect(
|
||||
calls.some(
|
||||
(sql) => sql.includes(`'${key}'`) && sql.includes('NOT EXISTS'),
|
||||
),
|
||||
).toBe(true);
|
||||
}
|
||||
expect(
|
||||
calls.some(
|
||||
(sql) =>
|
||||
sql.includes("'transaction_reverse_min_role'") &&
|
||||
sql.includes("'transaction_create_min_role'"),
|
||||
),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it('removes the new min-role settings again on down', async () => {
|
||||
const migrationModule = require('./1785524400000-AddTeamPermissionSettings');
|
||||
const migration =
|
||||
new migrationModule.AddTeamPermissionSettings1785524400000();
|
||||
const queryRunner = { query: jest.fn() } as any;
|
||||
|
||||
await migration.down(queryRunner);
|
||||
|
||||
expect(queryRunner.query).toHaveBeenCalledTimes(1);
|
||||
const sql = queryRunner.query.mock.calls[0][0];
|
||||
expect(sql).toContain('DELETE FROM "team_setting"');
|
||||
expect(sql).toContain('transaction_reverse_min_role');
|
||||
expect(sql).toContain('invite_min_role');
|
||||
expect(sql).toContain('member_manage_min_role');
|
||||
expect(sql).toContain('penalty_manage_min_role');
|
||||
expect(sql).toContain('public_access_manage_min_role');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user