37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const router = require('express').Router();
|
|
const { Resource, ResourceGroup } = require('../models/resource');
|
|
|
|
// GET /api/discovery/me
|
|
// Returns the list of resources the current user has access to.
|
|
router.get('/me', async (req, res, next) => {
|
|
try {
|
|
const userGroups = req.user.groups || []; // array of LDAP group CNs
|
|
const accessibleResourceIds = new Set();
|
|
|
|
if (req.user.isMachine) {
|
|
// Machines only have access to themselves by default
|
|
accessibleResourceIds.add(req.resourceId);
|
|
} else {
|
|
// End users get access via groups
|
|
const allGroups = await ResourceGroup.list();
|
|
for (const rg of allGroups) {
|
|
if (userGroups.includes(rg.groupCn)) {
|
|
accessibleResourceIds.add(rg.resourceId);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fetch all resources and filter
|
|
const allResources = await Resource.list();
|
|
const accessible = allResources.filter(r => accessibleResourceIds.has(r.id) || r.metadata?.isPublic);
|
|
|
|
res.json({ results: accessible });
|
|
} catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|