@magnetmlm/common
v3.2.58
Published
### Файл app.module.ts ```import { CacheModule, Global, Module } from '@nestjs/common'; import { AuthModule as MainAuthModule } from '@magnetmlm/common';
Downloads
823
Readme
1. Подключение
Файл app.module.ts
import { AuthModule as MainAuthModule } from '@magnetmlm/common';
@Global()
@Module({
imports: [
CacheModule.register(),
MainAuthModule,
...
],
providers: [
...
LoggerService,
{ useExisting: ConfigService, provide: 'ConfigService' },
],
exports: [..., 'ConfigService', CacheModule],
})
export class AppModule {}
Только в основном проекте (указаны только нужные для этой библиотеки зависимости)
user.module.ts
import { UserService } from './user.service';
import { EndpointSigStrategy } from '@magnetmlm/common';
@Global()
@Module({
providers: [
...
{ provide: 'UserService', useExisting: UserService },
EndpointSigStrategy,
],
exports: [..., 'UserService'],
})
export class UserModule {}
2. Роли
Наличие роли проверяется в RolesGuard из roles.guard.ts
Чтобы в проекте использовать роли нужно повесить UseGuards декоратор на контроллер, только после этого в ендпоинтах можно будет проверять роль:
user.controller.ts
import {
JwtAuthGuard, RolesGuard
} from '@magnetmlm/common';
@UseGuards(JwtAuthGuard, new RolesGuard(new Reflector()))
export class UserController {...}
Чтобы для определенного ендпоинта проверялась роль, надо на него повесить декоратор с нужной ролью:
import {
SetRoles,
UserRole,
} from '@magnetmlm/common';
@Post('/grant-role')
@SetRoles(UserRole.Admin)
[...other decorators]
async grantRoles(@Body() body: GrantRoleDto): Promise<void> {
return this.userService.grantRoles(body);
}
3. Обязательная подпись для любого ендпоинта
Чтобы повесить обязательную подпись на ендпоинт, нужно повесить на ендпоинт стратегию endpointSignature
(чтобы можно было добавлять подпись в свагере - @ApiHeader({ name: 'signature' }))
import {
CommonAuthStrategies,
} from '@magnetmlm/common';
@Controller('user')
@ApiTags('User')
@UseGuards(JwtAuthGuard, new RolesGuard(new Reflector()))
@ApiBearerAuth()
export class UserController {
@Post('/grant-role')
@UseGuards(AuthGuard(CommonAuthStrategies.endpointSignature))
@ApiHeader({ name: 'signature' })
async grantRoles(@Body() body: GrantRoleDto): Promise<void> {
return this.userService.grantRoles(body);
}
}
По дефолту при подключении библиотеки уже есть ендпоинт /sign/endpoint-message (реализация в auth.service.ts
) который отправляет сообщение для подписи для конкретного ендпоинта.
В данном случае передаваемые параметры будут такими:
method: MethodType.POST
path: 'user/grant-role'
Сообщение нужно подписать через метамаск и результат передать в хедер signature