mirror of
https://github.com/dadosfera/maestro.git
synced 2026-11-10 23:19:09 +00:00
FEAT: get permissions working
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { ApiProperty } from '@nestjs/swagger';
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
|
||||
export class PermissionDto {
|
||||
@ApiProperty()
|
||||
@@ -33,3 +33,12 @@ export class GetPublicPermissionsRes {
|
||||
@ApiProperty({ type: [PermissionGroup] })
|
||||
permissionGroups: PermissionGroup[];
|
||||
}
|
||||
|
||||
export enum LanguageEnum {
|
||||
ptbr = 'pt-br',
|
||||
enus = 'en-us',
|
||||
}
|
||||
export class GetPublicPermissionsHeader {
|
||||
@ApiPropertyOptional({ enum: LanguageEnum })
|
||||
'dadosfera-lang';
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
import { Controller, Get, Inject } from '@nestjs/common';
|
||||
import { Controller, Get, Headers, Inject } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { PermissionUsages } from 'src/authentication/permissions.enum';
|
||||
import { User } from 'src/authentication/user.decorator';
|
||||
import { GetPublicPermissionsRes } from './dto/entities';
|
||||
import {
|
||||
GetPublicPermissionsHeader,
|
||||
GetPublicPermissionsRes,
|
||||
LanguageEnum,
|
||||
} from './dto/entities';
|
||||
import { PermissionsClientService } from './permissions.service';
|
||||
|
||||
@ApiTags('Permissions')
|
||||
@@ -20,7 +25,16 @@ export class PermissionsController {
|
||||
|
||||
@Get()
|
||||
@ApiOkResponse({ type: GetPublicPermissionsRes })
|
||||
getPublicPermissions(@User() user) {
|
||||
getPublicPermissions(
|
||||
@User() user,
|
||||
@Headers() headers: GetPublicPermissionsHeader,
|
||||
) {
|
||||
this.logger.info('getPublicPermissions', { user });
|
||||
|
||||
const language: LanguageEnum = headers['dadosfera-lang'];
|
||||
return this.permissionsService.getPermissions(
|
||||
PermissionUsages.PUBLIC,
|
||||
language,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,13 +12,14 @@ import { PermissionsProtoService as PermissionsServiceInterface } from 'protospa
|
||||
import { InjectPermissionsRequest } from 'protospack-v2/dist/lib/Duc/interfaces/messages';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import {
|
||||
Permission,
|
||||
PermissionsObjectPermission,
|
||||
PERMISSIONS,
|
||||
PermissionsObject,
|
||||
PermissionUsages,
|
||||
PermissionsObjectGroup,
|
||||
} from '../../authentication/permissions.enum';
|
||||
import ErrorBuilder from '../../utils/ErrorBuilder';
|
||||
import { PermissionGroup } from './dto/entities';
|
||||
import { LanguageEnum, PermissionDto, PermissionGroup } from './dto/entities';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionsClientService
|
||||
@@ -73,11 +74,27 @@ export class PermissionsClientService
|
||||
this.permissionsService.InjectPermissions({ permissions }),
|
||||
);
|
||||
}
|
||||
getPublicPermissions() {
|
||||
return this.getPermissions(PermissionUsages.PUBLIC);
|
||||
}
|
||||
getPermissions(permissionUsage?: PermissionUsages): PermissionGroup[] {
|
||||
getPermissions(
|
||||
permissionUsage?: PermissionUsages,
|
||||
language: LanguageEnum = LanguageEnum.ptbr,
|
||||
): PermissionGroup[] {
|
||||
const groups: PermissionGroup[] = [];
|
||||
for (const key in PERMISSIONS) {
|
||||
const permissionGroup: PermissionsObjectGroup = PERMISSIONS[key];
|
||||
const title = permissionGroup.title[language];
|
||||
const permissions: PermissionDto[] = Object.values(
|
||||
permissionGroup.permissions,
|
||||
)
|
||||
.filter(({ usage }) =>
|
||||
permissionUsage ? usage === permissionUsage : true,
|
||||
)
|
||||
.map(({ seqid, name }) => ({ id: seqid, name: name[language] }));
|
||||
|
||||
groups.push({
|
||||
title,
|
||||
permissions,
|
||||
});
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user