Comments (9)
@mike-aungsan Did you try running the test in the LoopBack repo? Does it pass?
from loopback-acl-route.
Some of them passed. Some does not. I am also going to look into detail.
Here is the log. I use mongodb
test@test:~/loopback/loopback/test$ mocha role.test.js
role model
✓ should define role/role relations
✓ should define role/user relations
✓ should automatically generate role id
✓ should support getRoles() and isInRole()
✓ should support owner role resolver
isMappedToRole
1) "before each" hook
listByPrincipalType
2) "before each" hook for "should resolve user by id"
5 passing (3s)
2 failing
-
role model isMappedToRole "before each" hook for "should resolve user by id":
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
at done (/home/test/loopback/loopback/node_modules/async/lib/async.js:132:19)
at /home/test/loopback/loopback/node_modules/async/lib/async.js:32:16
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/relation-definition.js:1814:13
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:320:19
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:116:5)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at ModelConstructor. (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:319:23)
at ModelConstructor.next (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/hooks.js:75:12)
at ModelConstructor. (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:307:26)
at ModelConstructor.next (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/hooks.js:75:12)
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:306:22
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:116:5)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at createCallback (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:296:17)
at /home/test/loopback/loopback/node_modules/loopback-connector-mongodb/lib/mongodb.js:272:7
at process. (/home/test/loopback/loopback/node_modules/continuation-local-storage/node_modules/async-listener/index.js:19:15) -
role model isMappedToRole "before each" hook for "should resolve user by id":
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
at done (/home/test/loopback/loopback/node_modules/async/lib/async.js:132:19)
at /home/test/loopback/loopback/node_modules/async/lib/async.js:32:16
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/relation-definition.js:1814:13
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:320:19
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:116:5)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at ModelConstructor. (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:319:23)
at ModelConstructor.next (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/hooks.js:75:12)
at ModelConstructor. (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:307:26)
at ModelConstructor.next (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/hooks.js:75:12)
at /home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:306:22
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at doNotify (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:93:49)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:116:5)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at Function.ObserverMixin._notifyBaseObservers (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:114:15)
at Function.ObserverMixin.notifyObserversOf (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/observer.js:91:8)
at createCallback (/home/test/loopback/loopback/node_modules/loopback-datasource-juggler/lib/dao.js:296:17)
at /home/test/loopback/loopback/node_modules/loopback-connector-mongodb/lib/mongodb.js:272:7
at process. (/home/test/loopback/loopback/node_modules/continuation-local-storage/node_modules/async-listener/index.js:19:15)
from loopback-acl-route.
Can I extend RoleMapping?
If so, these two functions does not work.
RoleMapping.find(function(err, mappings) {
console.log('RoleMapping.find')
if (err)
console.log(err)
console.log(mappings) // empty if roleMapping is extended
console.log('')
});
userRole.roles(function(err, roles) {
console.log('userRole.roles')
if (err)
console.log(err)
console.log(roles)
console.log('')
});
role-mapping.json
{
"name": "roleMapping",
"base": "RoleMapping",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {},
"acls": [
],
"methods": {}
}
role-mapping.js
module.exports = function(RoleMapping) {
};
role.json
Here I cannot make admin Allow, acl 2nd rule, for everything. Any help?
{
"name": "role",
"base": "Role",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
},
"indexes": {
"name": {
"keys": {"name": 1},
"options": {"unique": true}
},
"ownerId": {
"keys": {"ownerId": 1}
}
},
"validations": [],
"relations": {
},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW",
"property": "*"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "lead",
"permission": "ALLOW"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
}
],
"methods": {}
}
from loopback-acl-route.
Is this a confirmed bug? I am using Role.isInRole() and not getting expected results. Any workaround/fix in sight?
from loopback-acl-route.
Do you have a simple repo to reproduce the issue?
from loopback-acl-route.
Hmm I am afraid not. Commercial project I have been contracted for.
I just need to know if a user is an admin. With my registered admin user, which I set up using the recommended method in the docs, when I do Role.isInRole("admin",context, callback) I always get back false. Should be true for an admin...(context is loopback.getCurrentContext()).
The current workaround I have is cumbersome and not really nice, getting all RoleMapping and iterate until I found my admin user...
from loopback-acl-route.
Hi,
I can make it work by putting properties for those extended models. Same as you, I have to clean up the code before I can push. I will try to put example today.
from loopback-acl-route.
@raymondfeng I published a simple repo to reproduce the problem.
It'a vanilla loopback, with just one TestModel.
It has a create_admin.js script in server/boot, and an after save hook in common/models/testmodel.js.
The Role.isInRole() call is in the model.
there is a simple test file in test/testmodels.js, which can be executed via the simple
mocha
call
Be sure to run npm install and npm install -g mocha
Also, I had to intervene in loopback-testing in order to be able to use a user which is logged in without always creating it (I don't know why loopback testing is doing it that way, it's counter-intuitive).
So you need to replace node_modules/loopback-testing/lib/helpers.js with the helpers.js in the root folder. It's just has some quick hacks in order for you to be able to reproduce this problem :)
So if you successfully can get the repo to run you would always get "false" for an admin user....
The repo is at
https://github.com/fablife/loopback-playground
from loopback-acl-route.
This work.
user.json
{
"name": "user",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
},
"validations": [],
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "accessToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
},
"identities": {
"type": "hasMany",
"model": "userIdentity",
"foreignKey": "userId"
},
"credentials": {
"type": "hasMany",
"model": "userCredential",
"foreignKey": "userId"
}
},
"acls": [],
"methods": {}
}
access-token.json
{
"name": "accessToken",
"base": "AccessToken",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"user": {
"type": "belongsTo",
"model": "user",
"foreignKey": "userId"
}
},
"acls": [],
"methods": {}
}
role.json
{
"name": "role",
"base": "Role",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"indexes": {},
"validations": [],
"relations": {
"principals": {
"type": "hasMany",
"model": "roleMapping",
"foreignKey": "roleId"
},
"user": {
"type": "belongsTo",
"model": "user",
"foreignKey": "ownerId"
}
},
"acls": [],
"methods": {}
}
role-mapping.json
{
"name": "roleMapping",
"base": "RoleMapping",
"description": "Map principals to roles",
"idInjection": false,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"role": {
"type": "belongsTo",
"model": "role",
"foreignKey": "roleId"
},
"user": {
"type": "belongsTo",
"model": "user",
"foreignKey": "ownerId"
}
},
"acls": [],
"methods": {}
}
from loopback-acl-route.
Related Issues (3)
- Please publish to npm HOT 1
- Use with defined roles HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from loopback-acl-route.