-
Notifications
You must be signed in to change notification settings - Fork 1
/
loopback-roles-resolver-compile-service.js
37 lines (37 loc) · 1.37 KB
/
loopback-roles-resolver-compile-service.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module.exports = function (securityService, loopback) {
return {
compile: function (objects) {
var self = this;
self.registerResolverForRole('admin'); //TODO get from system roles
objects.forEach(function (obj) {
obj.invokePropertiesOn({
roles: function (roles) {
roles.forEach(self.registerResolverForRole.bind(self));
}
})
})
},
registerResolverForRole: function (role) {
var Role = loopback.getModel('Role');
Role.registerResolver(role, function(role, context, cb) {
function reject(err) {
if(err) {
return cb(err);
}
cb(null, false);
}
var userId = context.accessToken.userId;
console.log("check role: " + role + " for user id: " + userId);
if (!userId) {
return reject();
}
securityService.readAndPrepareUser(userId).then(function (user) {
return user.hasRole(role);
}).then(function (inRole) {
console.log("inRole: " + inRole);
return inRole;
}).nodeify(cb);
});
}
}
};