diff --git a/packages/core/src/database/tables/server-wide/auth-roles.ts b/packages/core/src/database/tables/server-wide/auth-roles.ts index 943ac60d948..4c4d4f86bd1 100644 --- a/packages/core/src/database/tables/server-wide/auth-roles.ts +++ b/packages/core/src/database/tables/server-wide/auth-roles.ts @@ -6,16 +6,14 @@ export default class AuthRolesTable extends Table { async bootstrap() { await this.knex.createTableIfNotExists(this.name, table => { table.increments('id') - table - .string('name') - .unique() - .notNullable() + table.string('name').notNullable() table.text('description') table.json('rules').notNullable() table .integer('team') .references('auth_teams.id') .onDelete('CASCADE') + table.unique(['team', 'name']) table.timestamps() }) } diff --git a/packages/core/src/services/auth/teams-service.ts b/packages/core/src/services/auth/teams-service.ts index a5e6dae829f..f0a96484531 100644 --- a/packages/core/src/services/auth/teams-service.ts +++ b/packages/core/src/services/auth/teams-service.ts @@ -186,11 +186,11 @@ export default class TeamService { .then() } - async updateTeamRole(teamId: number, roleId: number, role: AuthRole) { + async updateTeamRole(teamId: number, roleId: number, role: Partial) { const dbRole = await this.knex(ROLES_TABLE) .select('name') .where({ id: roleId, team: teamId }) - .then(res => res) + .then(res => res) .get(0) if (!dbRole) { @@ -201,9 +201,14 @@ export default class TeamService { throw new InvalidOperationError("You can't edit the owner role") } + const patchRole: Partial = _.pick(role, 'description') + if ('rules' in role) { + patchRole.rules = JSON.stringify(role.rules) + } + return this.knex(ROLES_TABLE) .where('id', roleId) - .update(_.pick(role, 'description', 'rules')) + .update(patchRole) .then() }