Harden Tasgird user task lookup
This commit is contained in:
@@ -559,6 +559,23 @@ app.get('/api/tasks/list', async (c) => {
|
|||||||
return matched.map((user: any) => String(user.id || '').trim()).filter(Boolean);
|
return matched.map((user: any) => String(user.id || '').trim()).filter(Boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const allUsers = await taskPb.collection(PB_AUTH_COLLECTION).getFullList({
|
||||||
|
fields: 'id,name,email,username',
|
||||||
|
});
|
||||||
|
const lowerTarget = target.toLowerCase();
|
||||||
|
const fuzzy = allUsers.filter((user: any) => {
|
||||||
|
const values = [user?.name, user?.username, user?.email]
|
||||||
|
.map((value) => String(value || '').trim().toLowerCase())
|
||||||
|
.filter(Boolean);
|
||||||
|
return values.includes(lowerTarget);
|
||||||
|
});
|
||||||
|
if (fuzzy.length) {
|
||||||
|
return fuzzy.map((user: any) => String(user.id || '').trim()).filter(Boolean);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
|
||||||
if (meId && target === meName) {
|
if (meId && target === meName) {
|
||||||
return [meId];
|
return [meId];
|
||||||
}
|
}
|
||||||
@@ -572,7 +589,11 @@ app.get('/api/tasks/list', async (c) => {
|
|||||||
let effectiveUserName = targetUserName;
|
let effectiveUserName = targetUserName;
|
||||||
try {
|
try {
|
||||||
if (targetUserName) {
|
if (targetUserName) {
|
||||||
const targetUserIds = await resolveUserIdsByName(targetUserName);
|
const targetUserIds = Array.from(new Set([
|
||||||
|
...(await resolveUserIdsByName(targetUserName)),
|
||||||
|
...(requestedUserId ? [requestedUserId] : []),
|
||||||
|
...(meId && targetUserName === meName ? [meId] : []),
|
||||||
|
].map((id) => String(id || '').trim()).filter(Boolean)));
|
||||||
if (!targetUserIds.length) {
|
if (!targetUserIds.length) {
|
||||||
warning = `No Users record matched name "${targetUserName}".`;
|
warning = `No Users record matched name "${targetUserName}".`;
|
||||||
records = [];
|
records = [];
|
||||||
|
|||||||
+7
-2
@@ -374,8 +374,13 @@
|
|||||||
await ensurePocketBaseClient();
|
await ensurePocketBaseClient();
|
||||||
const token = getCurrentToken();
|
const token = getCurrentToken();
|
||||||
const userName = String(taskUserSelect.value || '').trim();
|
const userName = String(taskUserSelect.value || '').trim();
|
||||||
const url = userName
|
const selectedOption = taskUserSelect.selectedOptions?.[0] || null;
|
||||||
? `/api/tasks/list?userName=${encodeURIComponent(userName)}`
|
const userId = String(selectedOption?.dataset?.userId || '').trim();
|
||||||
|
const query = new URLSearchParams();
|
||||||
|
if (userName) query.set('userName', userName);
|
||||||
|
if (userId) query.set('userId', userId);
|
||||||
|
const url = query.toString()
|
||||||
|
? `/api/tasks/list?${query.toString()}`
|
||||||
: '/api/tasks/list';
|
: '/api/tasks/list';
|
||||||
const resp = await fetch(url, {
|
const resp = await fetch(url, {
|
||||||
headers: { 'x-pb-token': token },
|
headers: { 'x-pb-token': token },
|
||||||
|
|||||||
Reference in New Issue
Block a user