mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-05 17:53:12 +02:00
feat: Add ability to provide permissions when creating a role and rename environmentName to name in the list permissions datastructure
This commit is contained in:
parent
cb02ae9c92
commit
9d4f542f85
@ -113,7 +113,7 @@ export class AccessStore implements IAccessStore {
|
|||||||
Array.from(rawEnvironments).map(
|
Array.from(rawEnvironments).map(
|
||||||
([environmentName, environmentPermissions]) => {
|
([environmentName, environmentPermissions]) => {
|
||||||
return {
|
return {
|
||||||
environmentName: environmentName,
|
name: environmentName,
|
||||||
permissions: environmentPermissions.map(
|
permissions: environmentPermissions.map(
|
||||||
this.mapPermission,
|
this.mapPermission,
|
||||||
),
|
),
|
||||||
@ -264,6 +264,19 @@ export class AccessStore implements IAccessStore {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async addEnvironmentPermissionsToRole(
|
||||||
|
role_id: number,
|
||||||
|
permissions: IPermission[],
|
||||||
|
): Promise<void> {
|
||||||
|
const rows = permissions.map((x) => {
|
||||||
|
return {
|
||||||
|
role_id,
|
||||||
|
permission_id: x.id,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this.db.batchInsert(T.ROLE_PERMISSION, rows);
|
||||||
|
}
|
||||||
|
|
||||||
async addPermissionsToRole(
|
async addPermissionsToRole(
|
||||||
role_id: number,
|
role_id: number,
|
||||||
permissions: string[],
|
permissions: string[],
|
||||||
|
@ -1,20 +1,34 @@
|
|||||||
import { IUnleashConfig } from 'lib/server-impl';
|
import { IUnleashConfig } from 'lib/server-impl';
|
||||||
import { IUnleashStores } from 'lib/types';
|
import { IUnleashStores } from 'lib/types';
|
||||||
import { ICustomRole } from 'lib/types/model';
|
import { ICustomRole, IPermission } from 'lib/types/model';
|
||||||
import { ICustomRoleInsert, IRoleStore } from 'lib/types/stores/role-store';
|
import { IAccessStore } from 'lib/types/stores/access-store';
|
||||||
|
import { IRoleStore } from 'lib/types/stores/role-store';
|
||||||
import { Logger } from '../logger';
|
import { Logger } from '../logger';
|
||||||
|
|
||||||
|
interface IRoleCreation {
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
roleType: string;
|
||||||
|
permissions?: IPermission[];
|
||||||
|
}
|
||||||
|
|
||||||
export default class RoleService {
|
export default class RoleService {
|
||||||
private logger: Logger;
|
private logger: Logger;
|
||||||
|
|
||||||
private store: IRoleStore;
|
private store: IRoleStore;
|
||||||
|
|
||||||
|
private accessStore: IAccessStore;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
{ roleStore }: Pick<IUnleashStores, 'roleStore'>,
|
{
|
||||||
|
roleStore,
|
||||||
|
accessStore,
|
||||||
|
}: Pick<IUnleashStores, 'roleStore' | 'accessStore'>,
|
||||||
{ getLogger }: Pick<IUnleashConfig, 'getLogger'>,
|
{ getLogger }: Pick<IUnleashConfig, 'getLogger'>,
|
||||||
) {
|
) {
|
||||||
this.logger = getLogger('lib/services/session-service.ts');
|
this.logger = getLogger('lib/services/session-service.ts');
|
||||||
this.store = roleStore;
|
this.store = roleStore;
|
||||||
|
this.accessStore = accessStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAll(): Promise<ICustomRole[]> {
|
async getAll(): Promise<ICustomRole[]> {
|
||||||
@ -25,8 +39,21 @@ export default class RoleService {
|
|||||||
return this.store.get(id);
|
return this.store.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async create(role: ICustomRoleInsert): Promise<ICustomRole> {
|
async create(role: IRoleCreation): Promise<ICustomRole> {
|
||||||
return this.store.create(role);
|
const baseRole = {
|
||||||
|
name: role.name,
|
||||||
|
description: role.description,
|
||||||
|
roleType: role.roleType,
|
||||||
|
};
|
||||||
|
const permissions = role.permissions;
|
||||||
|
const newRole = await this.store.create(baseRole);
|
||||||
|
if (permissions) {
|
||||||
|
this.accessStore.addEnvironmentPermissionsToRole(
|
||||||
|
newRole.id,
|
||||||
|
permissions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return newRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(id: number): Promise<void> {
|
async delete(id: number): Promise<void> {
|
||||||
|
@ -227,7 +227,7 @@ export interface IPermission {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface IEnvironmentPermission {
|
export interface IEnvironmentPermission {
|
||||||
environmentName: string;
|
name: string;
|
||||||
permissions: IPermission[];
|
permissions: IPermission[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { IAvailablePermissions } from '../model';
|
import { IAvailablePermissions, IPermission } from '../model';
|
||||||
import { Store } from './store';
|
import { Store } from './store';
|
||||||
|
|
||||||
export interface IUserPermission {
|
export interface IUserPermission {
|
||||||
@ -28,6 +28,10 @@ export interface IAccessStore extends Store<IRole, number> {
|
|||||||
removeRolesForProject(projectId: string): Promise<void>;
|
removeRolesForProject(projectId: string): Promise<void>;
|
||||||
getRolesForUserId(userId: number): Promise<IRole[]>;
|
getRolesForUserId(userId: number): Promise<IRole[]>;
|
||||||
getUserIdsForRole(roleId: number): Promise<number[]>;
|
getUserIdsForRole(roleId: number): Promise<number[]>;
|
||||||
|
addEnvironmentPermissionsToRole(
|
||||||
|
role_id: number,
|
||||||
|
permissions: IPermission[],
|
||||||
|
): Promise<void>;
|
||||||
setupPermissionsForEnvironment(
|
setupPermissionsForEnvironment(
|
||||||
environmentName: string,
|
environmentName: string,
|
||||||
permissions: string[],
|
permissions: string[],
|
||||||
|
7
src/test/fixtures/fake-access-store.ts
vendored
7
src/test/fixtures/fake-access-store.ts
vendored
@ -9,6 +9,13 @@ import {
|
|||||||
import { IAvailablePermissions, IPermission } from 'lib/types/model';
|
import { IAvailablePermissions, IPermission } from 'lib/types/model';
|
||||||
|
|
||||||
class AccessStoreMock implements IAccessStore {
|
class AccessStoreMock implements IAccessStore {
|
||||||
|
addEnvironmentPermissionsToRole(
|
||||||
|
role_id: number,
|
||||||
|
permissions: IPermission[],
|
||||||
|
): Promise<void> {
|
||||||
|
throw new Error('Method not implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
setupPermissionsForEnvironment(
|
setupPermissionsForEnvironment(
|
||||||
environmentName: string,
|
environmentName: string,
|
||||||
permissions: string[],
|
permissions: string[],
|
||||||
|
Loading…
Reference in New Issue
Block a user