integrate telemetry module #12

This commit is contained in:
2026-01-24 21:25:04 +02:00
parent e5a49f5e8e
commit 80afb5c460
9 changed files with 712 additions and 7 deletions
+22 -2
View File
@@ -2,13 +2,19 @@ class AccessManager {
name = 'am'
init(app){
['user', 'editor', 'admin'].forEach(f => {
this[f] = this.oneOfThese([f]);
});
}
start(app){
}
getIp(req){
return req.headers['x-forwarded-for'] || req.socket.remoteAddress;
}
async audit(req, action, objectId, custom){
let data = {
t: Math.floor(Date.now() / 1000),
@@ -19,7 +25,7 @@ class AccessManager {
l: req?.lang?.code,
u: req.user?._id && this.app.db.ObjectId(req.user._id),
a: action,
o: objectId && this.app.db.ObjectId(objectId),
o: objectId,
c: custom
}
await this.app.db.create('log', data);
@@ -128,6 +134,20 @@ class AccessManager {
return user && user.roles.indexOf(role) > -1;
}
oneOfThese(roles){
return function(req, res, next){
let result = false;
roles.forEach(r=>{
if (req.user && (req.user.roles?.indexOf(r)>-1 || req.user.groups?.filter(g=>g.startsWith(r+'.')).length)
|| r == 'guest' ){
result = true;
}
});
if (result) next();
else res.status(401).json({status:'error', error:'noPermissions'}).end();
}
}
}
export { AccessManager }