v0.12.49 Login Type and Event bug fixes
This commit is contained in:
@@ -65,7 +65,15 @@ async function canViewEvent(schema, event, userId, isToolManager) {
|
||||
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id
|
||||
WHERE eug.event_id=$1 AND ugm.user_id=$2
|
||||
`, [event.id, userId]);
|
||||
return !!assigned;
|
||||
if (assigned) return true;
|
||||
// Also allow if user has an alias in one of the event's user groups (Guardian Only mode)
|
||||
const aliasAssigned = await queryOne(schema, `
|
||||
SELECT 1 FROM event_user_groups eug
|
||||
JOIN alias_group_members agm ON agm.user_group_id=eug.user_group_id
|
||||
JOIN guardian_aliases ga ON ga.id=agm.alias_id
|
||||
WHERE eug.event_id=$1 AND ga.guardian_id=$2
|
||||
`, [event.id, userId]);
|
||||
return !!aliasAssigned;
|
||||
}
|
||||
|
||||
async function enrichEvent(schema, event) {
|
||||
@@ -235,11 +243,21 @@ router.get('/:id', authMiddleware, async (req, res) => {
|
||||
const itm = await isToolManagerFn(req.schema, req.user);
|
||||
if (!(await canViewEvent(req.schema, event, req.user.id, itm))) return res.status(403).json({ error: 'Access denied' });
|
||||
await enrichEvent(req.schema, event);
|
||||
const isMember = !itm && !!(await queryOne(req.schema, `
|
||||
SELECT 1 FROM event_user_groups eug
|
||||
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id
|
||||
WHERE eug.event_id=$1 AND ugm.user_id=$2
|
||||
`, [event.id, req.user.id]));
|
||||
const isMember = !itm && !!(
|
||||
(await queryOne(req.schema, `
|
||||
SELECT 1 FROM event_user_groups eug
|
||||
JOIN user_group_members ugm ON ugm.user_group_id=eug.user_group_id
|
||||
WHERE eug.event_id=$1 AND ugm.user_id=$2
|
||||
`, [event.id, req.user.id]))
|
||||
||
|
||||
// Guardian Only: user has an alias in one of the event's user groups
|
||||
(await queryOne(req.schema, `
|
||||
SELECT 1 FROM event_user_groups eug
|
||||
JOIN alias_group_members agm ON agm.user_group_id=eug.user_group_id
|
||||
JOIN guardian_aliases ga ON ga.id=agm.alias_id
|
||||
WHERE eug.event_id=$1 AND ga.guardian_id=$2
|
||||
`, [event.id, req.user.id]))
|
||||
);
|
||||
if (event.track_availability && (itm || isMember)) {
|
||||
// User responses
|
||||
const userAvail = await query(req.schema, `
|
||||
@@ -253,6 +271,18 @@ router.get('/:id', authMiddleware, async (req, res) => {
|
||||
`, [req.params.id]);
|
||||
event.availability = [...userAvail, ...aliasAvail];
|
||||
|
||||
// For non-tool-managers: mask notes on entries that don't belong to them or their aliases
|
||||
if (!itm) {
|
||||
const myAliasIds = new Set(
|
||||
(await query(req.schema, 'SELECT id FROM guardian_aliases WHERE guardian_id=$1', [req.user.id])).map(r => r.id)
|
||||
);
|
||||
event.availability = event.availability.map(r => {
|
||||
const isOwn = !r.is_alias && r.user_id === req.user.id;
|
||||
const isOwnAlias = r.is_alias && myAliasIds.has(r.alias_id);
|
||||
return (isOwn || isOwnAlias) ? r : { ...r, note: null };
|
||||
});
|
||||
}
|
||||
|
||||
if (itm) {
|
||||
const assignedRows = await query(req.schema, `
|
||||
SELECT DISTINCT u.id AS user_id, u.name, u.first_name, u.last_name, u.display_name
|
||||
|
||||
Reference in New Issue
Block a user