FIX: Data asset sharing

This commit is contained in:
Victor Radael
2022-09-30 18:13:23 -03:00
parent b6ec2a83b2
commit 1ff135c0d7
6 changed files with 55 additions and 5 deletions
@@ -112,6 +112,7 @@ export class CatalogController {
const res = await this.catalogService.getAllOpenSearchDataAssets(
params,
metadata,
customer_id,
);
return res.data_assets;
+2
View File
@@ -8,6 +8,7 @@ import { CatalogClientConfiguration } from './catalog-client';
import { ClientsModule } from '@nestjs/microservices';
import { PipelinesModule as OldPipelineModule } from 'src/modules/pipelines/pipelines.module';
import { UsersModule } from '../users/users.module';
import { RolesModule } from '../roles/roles.module';
const client = new CatalogClientConfiguration();
@@ -16,6 +17,7 @@ const client = new CatalogClientConfiguration();
ClientsModule.register([client.providerOptions]),
OldPipelineModule,
UsersModule,
RolesModule,
],
controllers: [CatalogController],
providers: [CatalogService, DadosferaLogger],
+48 -1
View File
@@ -14,6 +14,7 @@ import axios from 'axios';
import { lastValueFrom } from 'rxjs';
import { CatalogClientConfiguration } from './catalog-client';
import { UsersService } from '../users/users.service';
import { RolesService } from '../roles/roles.service';
class CatalogService implements OnModuleInit {
catalogReadService: ReadService.CatalogReadServices;
@@ -25,6 +26,7 @@ class CatalogService implements OnModuleInit {
@Inject(CatalogClientConfiguration.name)
private readonly grpcClient: ClientGrpc,
private readonly userService: UsersService,
private readonly roleService: RolesService,
) {
this.logger = dadosferaLogger.logger;
}
@@ -117,9 +119,36 @@ class CatalogService implements OnModuleInit {
return roles_ids;
}
async getUsernamesAndRolesByCustomerId(customerId: string) {
const resultUsers = await this.userService.findAllUsersByCustomerId(
customerId,
);
const resultRoles = await this.roleService.roleSearch(
{},
{ customer_id: customerId },
);
const customer_users = resultUsers.users.map((user) => {
return {
id: user.id,
username: user.username,
};
});
const customer_roles = resultRoles.roles.map((role) => {
return {
id: role.id,
name: role.name,
};
});
return [customer_users, customer_roles];
}
async getAllOpenSearchDataAssets(
data: Messages.GetAllDataAssetsRequest,
metadata,
customer_id,
) {
this.logger.info('CatalogService - getAllOpenSearchDashboard');
@@ -135,6 +164,9 @@ class CatalogService implements OnModuleInit {
throw new Error(err);
});
const [customer_users, customer_roles] =
await this.getUsernamesAndRolesByCustomerId(customer_id);
for (const asset of response.tables) {
const condition =
asset.owner && !asset.owner.includes('@') ? true : false;
@@ -144,7 +176,22 @@ class CatalogService implements OnModuleInit {
const owner = result !== null ? result.user.username : null;
Object.assign(asset, { ...asset, owner });
const roles = [];
const users = [];
for (const role of customer_roles) {
for (const role_id of asset.roles) {
if (role.id === role_id) roles.push(role);
}
}
for (const user of customer_users) {
for (const user_id of asset.users) {
if (user.id === user_id) users.push(user);
}
}
Object.assign(asset, { ...asset, owner, roles, users });
}
for (const asset of response.dashboards) {
+2 -2
View File
@@ -36,9 +36,9 @@ export enum TrueOrFalseEnum {
}
export class GetRolesByCustomerReq {
@ApiPropertyOptional()
permissionId: string[];
permissionId?: string[];
@ApiPropertyOptional({ enum: TrueOrFalseEnum })
getUsers: TrueOrFalseEnum;
getUsers?: TrueOrFalseEnum;
}
export class GetRolesByCustomerRes {
+1 -1
View File
@@ -72,7 +72,7 @@ export class RolesService {
async roleSearch(
filters: GetRolesByCustomerReq,
{ customer_id, access_token }: RequestUser,
{ customer_id, access_token }: any,
) {
const meta = new Metadata();
meta.add('access_token', access_token);
+1 -1
View File
File diff suppressed because one or more lines are too long