test
This commit is contained in:
@@ -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 } } }];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user