integrate telemetry module #12
This commit is contained in:
@@ -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 }
|
||||
Reference in New Issue
Block a user