This commit is contained in:
Sone
2025-12-27 19:54:20 +01:00
parent af4d079181
commit f2c2171815
2 changed files with 65 additions and 53 deletions
+40 -36
View File
@@ -120,15 +120,26 @@ export class SearchService {
const { tokens } = tokenize(q);
// Users visibility rules
const usersWhere: any = {
OR: [
{ firstName: { contains: q, mode: "insensitive" } },
{ lastName: { contains: q, mode: "insensitive" } },
{ email: { contains: q, mode: "insensitive" } },
{ title: { contains: q, mode: "insensitive" } },
],
};
if (requesterRole === Role.ADMIN) {
// Admins: can search ONLY normal users (no managers/admins)
usersWhere.AND = [{ role: Role.USER }];
} else if (requesterRole === Role.MANAGER) {
// Managers: can search admins, managers, and normal users
usersWhere.AND = [{ role: { in: [Role.ADMIN, Role.MANAGER, Role.USER] } }];
}
const usersCandidates = await prisma.user.findMany({
where: {
OR: [
{ firstName: { contains: q, mode: "insensitive" } },
{ lastName: { contains: q, mode: "insensitive" } },
{ email: { contains: q, mode: "insensitive" } },
{ title: { contains: q, mode: "insensitive" } },
],
},
where: usersWhere,
select: {
id: true,
firstName: true,
@@ -148,16 +159,7 @@ export class SearchService {
],
};
if (requesterRole === Role.MANAGER && requesterId) {
todoWhere.AND = [
{
OR: [
{ assignees: { some: { id: requesterId } } },
{ assignees: { some: { managerId: requesterId } } },
],
},
];
} else if (requesterRole === Role.ADMIN && requesterId) {
if (requesterRole === Role.ADMIN && requesterId) {
todoWhere.AND = [{ assignees: { some: { id: requesterId } } }];
}
@@ -236,15 +238,26 @@ export class SearchService {
const { tokens } = tokenize(q);
// Users visibility rules
const usersWhereFull: any = {
OR: [
{ firstName: { contains: q, mode: "insensitive" } },
{ lastName: { contains: q, mode: "insensitive" } },
{ email: { contains: q, mode: "insensitive" } },
{ title: { contains: q, mode: "insensitive" } },
],
};
if (requesterRole === Role.ADMIN) {
// Admins: can search ONLY normal users (no managers/admins)
usersWhereFull.AND = [{ role: Role.USER }];
} else if (requesterRole === Role.MANAGER) {
// Managers: can search admins, managers, and normal users
usersWhereFull.AND = [{ role: { in: [Role.ADMIN, Role.MANAGER, Role.USER] } }];
}
const userCandidates = await prisma.user.findMany({
where: {
OR: [
{ firstName: { contains: q, mode: "insensitive" } },
{ lastName: { contains: q, mode: "insensitive" } },
{ email: { contains: q, mode: "insensitive" } },
{ title: { contains: q, mode: "insensitive" } },
],
},
where: usersWhereFull,
select: {
id: true,
firstName: true,
@@ -265,16 +278,7 @@ export class SearchService {
{ task: { contains: q, mode: "insensitive" } },
],
};
if (requesterRole === Role.MANAGER && requesterId) {
todoWhere.AND = [
{
OR: [
{ assignees: { some: { id: requesterId } } },
{ assignees: { some: { managerId: requesterId } } },
],
},
];
} else if (requesterRole === Role.ADMIN && requesterId) {
if (requesterRole === Role.ADMIN && requesterId) {
todoWhere.AND = [{ assignees: { some: { id: requesterId } } }];
}