72 lines
2.0 KiB
TypeScript
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';
|
|
}
|
|
}
|
|
|
|
|