实现权限管理的服务
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { Entity, Index, PrimaryColumn } from "typeorm";
|
import { Entity, Index, PrimaryColumn } from "typeorm";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@Index(['roleId', 'permissionId'])
|
@Index(['roleId', 'permissionId'], { unique: true })
|
||||||
export class RolePermission {
|
export class RolePermission {
|
||||||
@PrimaryColumn('uuid')
|
@PrimaryColumn('uuid')
|
||||||
roleId: string;
|
roleId: string;
|
||||||
|
|||||||
@@ -7,4 +7,7 @@ export class Role {
|
|||||||
|
|
||||||
@Column({ unique: true })
|
@Column({ unique: true })
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
localName: string;
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Injectable } from "@nestjs/common";
|
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||||
import { InjectRepository } from "@nestjs/typeorm";
|
import { InjectRepository } from "@nestjs/typeorm";
|
||||||
import { Permission } from "../entities/permission.entity";
|
import { Permission } from "../entities/permission.entity";
|
||||||
import { In, Repository } from "typeorm";
|
import { In, Repository } from "typeorm";
|
||||||
@@ -23,4 +23,21 @@ export class PermissionService {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async list() {
|
||||||
|
return this.permissionRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
async create(permission: Pick<Permission, 'name' | 'description'>): Promise<Permission> {
|
||||||
|
const newPermission = this.permissionRepository.create(permission);
|
||||||
|
return this.permissionRepository.save(newPermission);
|
||||||
|
}
|
||||||
|
|
||||||
|
async delete(permissionId: string): Promise<void> {
|
||||||
|
const existingPermission = await this.permissionRepository.findOne({ where: { id: permissionId } });
|
||||||
|
if (!existingPermission) {
|
||||||
|
throw new BadRequestException('Permission not found');
|
||||||
|
}
|
||||||
|
await this.permissionRepository.delete(existingPermission.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -20,4 +20,23 @@ export class RolePermissionService {
|
|||||||
|
|
||||||
return rolePermissions.map(rp => rp.permissionId);
|
return rolePermissions.map(rp => rp.permissionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async addRolePermissions(roleId: string, permissionIds: string[]): Promise<void> {
|
||||||
|
const rolePermissions = permissionIds.map(permissionId => {
|
||||||
|
const rolePermission = this.rolePermissionRepository.create({
|
||||||
|
roleId,
|
||||||
|
permissionId,
|
||||||
|
});
|
||||||
|
return rolePermission;
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.rolePermissionRepository.save(rolePermissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteRolePermissions(roleId: string, permissionIds: string[]): Promise<void> {
|
||||||
|
await this.rolePermissionRepository.delete({
|
||||||
|
roleId,
|
||||||
|
permissionId: In(permissionIds),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Injectable } from "@nestjs/common";
|
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||||
import { InjectRepository } from "@nestjs/typeorm";
|
import { InjectRepository } from "@nestjs/typeorm";
|
||||||
import { Role } from "../entities/role.entity";
|
import { Role } from "../entities/role.entity";
|
||||||
import { In, Repository } from "typeorm";
|
import { In, Repository } from "typeorm";
|
||||||
@@ -23,4 +23,21 @@ export class RoleService {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async create(role: Pick<Role, 'name' | 'localName'>): Promise<Role> {
|
||||||
|
const newRole = this.roleRepository.create(role);
|
||||||
|
return this.roleRepository.save(newRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
async list(): Promise<Role[]> {
|
||||||
|
return this.roleRepository.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
async delete(roleId: string): Promise<void> {
|
||||||
|
const existingRole = await this.roleRepository.findOne({ where: { id: roleId } });
|
||||||
|
if (!existingRole) {
|
||||||
|
throw new BadRequestException('Role not found');
|
||||||
|
}
|
||||||
|
await this.roleRepository.delete(existingRole.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user