trust-module-backend/src/auth/auth.service.ts

72 lines
2.0 KiB
TypeScript

import { Injectable, ForbiddenException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
import * as bcrypt from 'bcrypt';
@Injectable()
export class AuthService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
private jwtService: JwtService,
) { }
async validateUser(login: string, password: string): Promise<any> {
const user = await this.usersRepository.findOne({ where: { login } });
if (user && user.password === password) {
const { password, ...result } = user;
return {
...result,
role: user.role
};
}
return null;
}
async login(user: any) {
const payload = {
username: user.login,
sub: user.id,
role: user.role
};
return {
access_token: this.jwtService.sign(payload),
};
}
async getAllUsers(): Promise<User[]> {
return this.usersRepository.find();
}
async createUser(login: string, password: string, role: 'user' | 'admin' = 'user'): Promise<User> {
// const hashedPassword = await bcrypt.hash(password, 10);
const user = this.usersRepository.create({
login,
password, //hashedPassword,
role
});
return this.usersRepository.save(user);
}
async deleteUser(id: number): Promise<void> {
const user = await this.usersRepository.findOne({ where: { id } });
if (user && user.role === 'admin') {
throw new ForbiddenException('Cannot delete admin user');
}
await this.usersRepository.delete(id);
}
async isAdmin(userId: number): Promise<boolean> {
const user = await this.usersRepository.findOne({ where: { id: userId } });
return user?.role === 'admin';
}
}