Updated projects.ts#checkProjectAccess
This commit is contained in:
parent
65fde10e97
commit
618c81cbe2
@ -3,17 +3,26 @@ import { encryptClearField } from "@utils/decryption";
|
||||
import { Types } from "mongoose";
|
||||
import crypto from "crypto";
|
||||
import { IKeyRole } from "@models/AccessKey";
|
||||
import { Member } from "@models/Member";
|
||||
|
||||
export const checkProjectAccess = (requiredPermission: IKeyRole) => async (userId: string, projectId: string) => {
|
||||
if (!Types.ObjectId.isValid(projectId))
|
||||
return { code: 3, message: "Invalid object id provided" };
|
||||
|
||||
const project = await Project.findOne({ _id: projectId, creatorId: encryptClearField(userId) });
|
||||
let project = await Project.findOne({ _id: projectId, creatorId: encryptClearField(userId) });
|
||||
if (project !== null) return project;
|
||||
|
||||
const projectMember = await Member.findOne({ memberId: encryptClearField(userId || ""), accepted: true });
|
||||
if (projectMember === null) return { code: 5009, message: "The provided project id does not exist" };
|
||||
|
||||
project = await Project.findById(projectMember.projectId);
|
||||
if (project === null) return { code: 5009, message: "The provided project id does not exist" };
|
||||
|
||||
// TODO: Get project where userId is a member
|
||||
if (projectMember.role === IKeyRole.ADMIN) return project;
|
||||
if (requiredPermission === IKeyRole.MANAGE && projectMember.role === IKeyRole.MANAGE) return project;
|
||||
if (requiredPermission === IKeyRole.VIEW && (projectMember.role === IKeyRole.VIEW || projectMember.role === IKeyRole.MANAGE)) return project;
|
||||
|
||||
return project;
|
||||
return { code: 5009, message: "The provided project id does not exist" };
|
||||
};
|
||||
|
||||
const projectMapper = (project: IProject) => ({
|
||||
@ -24,7 +33,11 @@ const projectMapper = (project: IProject) => ({
|
||||
export const listProjects = async (userId?: string) => {
|
||||
const projects = await Project.find({ creatorId: encryptClearField(userId || "") });
|
||||
|
||||
// TODO: Find projects where userId is a member
|
||||
const memberProjects = await Member.find({ memberId: encryptClearField(userId || ""), accepted: true });
|
||||
for (let project of memberProjects) {
|
||||
const foundProject = await Project.findById(project.projectId);
|
||||
if (foundProject !== null) projects.push(foundProject);
|
||||
}
|
||||
|
||||
return projects.map(project => projectMapper(project));
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user