GithubHelp home page GithubHelp logo

Comments (9)

superkhau avatar superkhau commented on June 16, 2024

@mike-aungsan Did you try running the test in the LoopBack repo? Does it pass?

from loopback-acl-route.

mike-aungsan avatar mike-aungsan commented on June 16, 2024

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

  1. 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)

  2. 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.

mike-aungsan avatar mike-aungsan commented on June 16, 2024

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.

holisticode avatar holisticode commented on June 16, 2024

Is this a confirmed bug? I am using Role.isInRole() and not getting expected results. Any workaround/fix in sight?

from loopback-acl-route.

raymondfeng avatar raymondfeng commented on June 16, 2024

Do you have a simple repo to reproduce the issue?

from loopback-acl-route.

holisticode avatar holisticode commented on June 16, 2024

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.

mike-tofi avatar mike-tofi commented on June 16, 2024

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.

holisticode avatar holisticode commented on June 16, 2024

@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.

mike-tofi avatar mike-tofi commented on June 16, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.