我正在开发一个 NestJS 项目,该项目需要基于权限的访问控制。
涵盖了大部分功能。用户的权限与每个请求相关联。路由(或控制器)用权限名称进行修饰。如果用户没有在路由/控制器上定义的权限,则访问将被拒绝。这部分是通过权限保护来解决的。
我要解决的案例是服务层基于权限的访问。普通用户不允许访问数据库中的所有用户。
我的第一次尝试是在服务方法(例如 findAll)中检查用户的权限,如果只允许用户读取自己的实体,我将只返回该用户。否则,返回所有实体。但是,为了使其工作,我必须将 userId 和用户的权限从控制器传递到服务层。有没有更好的方法来解决这个问题?
尝试类似的事情
import { SetMetadata } from '@nestjs/common';
// your key
export const REQUIRED_PERMISSIONS_KEY = 'required-xxx-key';
export const RequirePermissions = (permissions: string[]) => {
return SetMetadata(REQUIRED_PERMISSIONS_KEY, permissions);
};
然后使用,例如在控制器中的
list
端点。
@RequirePermissions([NotificationsPermissions.POC_ACCESS])
@Get()
async list(