/ / ACL, ktoré neumožňuje prehľadávanie adminov - acl, loopbackjs, strongloop

ACL umožňujúce vyhľadávanie správcu - acl, loopbackjs, strongloop

Snažím sa prispôsobiť to, čo som sa naučil z internetupríklady riadenia prístupu do skutočne jednoduchého rozhrania API, ktoré má momentálne účet správcu, ktorý sa môže prihlásiť a vytvoriť „publikáciu“. Dokážem sa prihlásiť používateľa a získať prístupový token. Keď sa pokúsim uverejniť príspevok v koncovom bode publikácie, dostávam 401 Unauthorized chyba. Bol som na to prilepený skoro celý deň. Hľadal som a nenašiel som žiadne informácie o tomto probléme. Pomoc by bola ocenená.

Toto je výstup, keď spustím DEBUG=loopback:security:* slc run:

lopback:security:role isInRole(): admin +10s
loopback:security:access-context ---AccessContext--- +0ms
loopback:security:access-context principals: +0ms
loopback:security:access-context principal: {"type":"USER","id":1} +0ms
loopback:security:access-context modelName publication +0ms
loopback:security:access-context modelId undefined +0ms
loopback:security:access-context property create +0ms
loopback:security:access-context method create +0ms
loopback:security:access-context accessType WRITE +0ms
loopback:security:access-context accessToken: +0ms
loopback:security:access-context   id "HtEgTxkSSROIJEfZiB3AObXnWVGGZ0VoFkNDX7jie8HHZh8nHv5vNzGDEgNWiBCb" +0ms
loopback:security:access-context   ttl 1209600 +0ms
loopback:security:access-context getUserId() 1 +0ms
loopback:security:access-context isAuthenticated() true +0ms
loopback:security:role isInRole(): $everyone +1ms
loopback:security:access-context ---AccessContext--- +0ms
loopback:security:access-context principals: +0ms
loopback:security:access-context principal: {"type":"USER","id":1} +0ms
loopback:security:access-context modelName publication +0ms
loopback:security:access-context modelId undefined +0ms
loopback:security:access-context property create +0ms
loopback:security:access-context method create +0ms
loopback:security:access-context accessType WRITE +0ms
loopback:security:access-context accessToken: +0ms
loopback:security:access-context   id "HtEgTxkSSROIJEfZiB3AObXnWVGGZ0VoFkNDX7jie8HHZh8nHv5vNzGDEgNWiBCb" +1ms
loopback:security:access-context   ttl 1209600 +0ms
loopback:security:access-context getUserId() 1 +0ms
loopback:security:access-context isAuthenticated() true +0ms
loopback:security:role Custom resolver found for role $everyone +0ms
loopback:security:role Role found: {"id":1,"name":"admin","created":"2014-12-17T21:02:30.442Z","modified":"2014-12-17T21:02:30.442Z"} +0ms
loopback:security:role Role mapping found: null +2ms
loopback:security:role isInRole() returns: false +0ms
loopback:security:acl The following ACLs were searched:  +0ms
loopback:security:acl ---ACL--- +0ms
loopback:security:acl model publication +0ms
loopback:security:acl property * +0ms
loopback:security:acl principalType ROLE +1ms
loopback:security:acl principalId $everyone +0ms
loopback:security:acl accessType * +0ms
loopback:security:acl permission DENY +0ms
loopback:security:acl with score: +0ms 7495
loopback:security:acl ---Resolved--- +0ms
loopback:security:access-context ---AccessRequest--- +0ms
loopback:security:access-context  model publication +0ms
loopback:security:access-context  property create +1ms
loopback:security:access-context  accessType WRITE +0ms
loopback:security:access-context  permission DENY +0ms
loopback:security:access-context  isWildcard() false +0ms
loopback:security:access-context  isAllowed() false +0ms

common / models / publication.json

{
"name": "publication",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
},
"price": {
"type": "number",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW",
"property": "create"
}

],
"methods": []
}

server / database.json

{
"ids": {
"User": 1,
"AccessToken": 2,
"ACL": 1,
"RoleMapping": 1,
"Role": 1,
"publication": 1,
"account": 3
},
"models": {
"User": {},
"AccessToken": {
"HtEgTxkSSROIJEfZiB3AObXnWVGGZ0VoFkNDX7jie8HHZh8nHv5vNzGDEgNWiBCb": "{"id":"HtEgTxkSSROIJEfZiB3AObXnWVGGZ0VoFkNDX7jie8HHZh8nHv5vNzGDEgNWiBCb","ttl":1209600,"created":"2014-12-17T21:02:48.103Z","userId":1}"
},
"ACL": {},
"RoleMapping": {
"1": "{"id":1,"principalType":"USER","roleId":1}"
},
"Role": {
"1": "{"id":1,"name":"admin","created":"2014-12-17T21:02:30.442Z","modified":"2014-12-17T21:02:30.442Z"}"
},
"publication": {},
"account": {
"1": "{"fullname":"Jane Doe","username":"janed","password":"$2a$10$PWkG/Y.Jb9w25xtxZwUt/.WOQRZTVgIdKTalGVoCyBE3PoDqD9tK6","email":"jane.doe@example.com","id":1}",
"2": "{"fullname":"John Doe","username":"johnd","password":"$2a$10$dD6r9NmV18R.epAg8.FuvuluQoJfIPMnUw9nGVFivu94PeKp0aKja","email":"john.doe@example.com","id":2}"
}
}
}

editovať:

Určitý pokrok som si všimol, že moje hlavné ID mapovania rolí nebolo nastavené pri vytváraní testovacích údajov. Opravil som však, že mapovanie rolí ešte nebolo nájdené.

Upraviť 2:

Vlastne to bol skutočne problém, skúšal som nesprávny koncový bod potom, čo som opravil principalId, Testovanie koncového bodu vytvorenia teraz funguje.

odpovede:

1 pre odpoveď č. 1

Ukázalo sa, že keď nastavujem svoje testovacie údaje, nebol som správne nastavený hlavný identifikátor. Použil som

var accounts = [{
username: "janed",
email: "jane.doe@example.com",
fullname: "Jane Doe",
password: "secret"
}, {
username: "johnd",
email: "john.doe@example.com",
fullname: "John Doe",
password: "secret"
}];

accounts.forEach(function (account) {
Account.create(account, function(err, result) {
//...
role.principals.create({
principalType: RoleMapping.USER,
principalId: account.id // <-- undefined! should use result.id
});
//...

Raz prepnem použitie hlavného ID result.id ACL začala pracovať.


0 pre odpoveď č. 2

Úspešne používam loopback z minulých 4 rokovmesiacov a vo veľmi vysokej prevádzke aplikácie, aj keď som sa stretol s týmto problémom acl na začiatku, ak sa pozriete do denníka, že ste spomenuli, je to jasne ukazuje, že prístup nie je povolený.

loopback:security:acl permission DENY +0ms
loopback:security:access-context  permission DENY +0ms

Len málo vecí, ktoré môžete urobiť, aby ste si to vyskúšali,

  1. dať vytvoreniu prístup ku všetkým $ $ ako prvý askontrolovať, či to funguje alebo nie, potom môžete zmeniť prístup k autentifikácii $ a skontrolovať, ak neskôr niekto pracuje, znamená to, že ACL sú v poriadku a existuje problém s mapovaním rolí alebo rolí.

  2. skúste vytvoriť acl prvýkrát pomocou generátora acl: -slc loopback:acl To vás prevedie vytvorením acl na jeho vlastné.