实现权限管理的服务

This commit is contained in:
2025-05-08 22:26:04 +08:00
parent ff4c755fc8
commit 1b73ef6bc9
5 changed files with 59 additions and 3 deletions

View File

@@ -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;

View File

@@ -7,4 +7,7 @@ export class Role {
@Column({ unique: true }) @Column({ unique: true })
name: string; name: string;
@Column()
localName: string;
} }

View File

@@ -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);
}
} }

View File

@@ -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),
});
}
} }

View File

@@ -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);
}
} }