feat:初始化项目

This commit is contained in:
R524809
2026-01-23 17:42:48 +08:00
commit d4fc8f44ee
107 changed files with 17487 additions and 0 deletions
@@ -0,0 +1,54 @@
import { Injectable, CanActivate, ExecutionContext, ForbiddenException } from '@nestjs/common';
import { User, UserRole } from '../../users/user.entity';
/**
* 资源所有者或管理员权限 Guard
*
* 用途:检查用户是否有权限访问资源
* - 管理员(admin、super_admin)可以访问任何资源
* - 普通用户只能访问自己的资源(通过比较 id)
*
* 使用场景:
* - 查询用户信息:管理员可以查询任何用户,普通用户只能查询自己
* - 更新用户信息:管理员可以更新任何用户,普通用户只能更新自己
* - 删除用户:管理员可以删除任何用户,普通用户只能删除自己
*/
@Injectable()
export class OwnerOrAdminGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest<{
user?: User;
params: { id?: string };
}>();
const user = request.user;
if (!user) {
throw new ForbiddenException('未授权访问');
}
// 获取请求的资源ID(从路由参数中)
const requestedId = request.params?.id;
if (!requestedId) {
// 如果没有提供资源ID,只允许管理员访问
const isAdmin = user.role === UserRole.ADMIN || user.role === UserRole.SUPER_ADMIN;
if (!isAdmin) {
throw new ForbiddenException('权限不足,需要管理员权限');
}
return true;
}
const requestedUserId = +requestedId;
// 检查权限:管理员可以访问任何资源,普通用户只能访问自己的资源
const isAdmin = user.role === UserRole.ADMIN || user.role === UserRole.SUPER_ADMIN;
const isOwner = user.id === requestedUserId;
if (!isAdmin && !isOwner) {
throw new ForbiddenException('权限不足,只能访问自己的资源或需要管理员权限');
}
return true;
}
}