2016-12-12 1 views
1

Je suis assez nouveau à node.js/mlab et j'essaye de comprendre mes listes de contrôle d'accès.MLab et Loopback ACL - A beaucoup (POST)

J'ai deux modèles, Songs et Accounts.

J'ai créé une relation entre les comptes et les chansons où un compte a plusieurs chansons appelées favoris.

"relations": { 
    "favorites": { 
    "type": "hasMany", 
    "model": "Song", 
    "foreignKey": "" 
    } 
} 

La façon dont je veux que mon ACL mis en place est que seul l'administrateur peut créer de nouvelles chansons, mais tout le monde authentifié peut ajouter des chansons à leurs favoris.

J'ai un point final (id = userId et il faut aussi un jeton):

/Accounts/{id}/favorites 

Le problème est, chaque fois que je tente de POST à ​​ce point final, je reçois:

http://0.0.0.0:3000/api/Accounts/584e6ed148d44a6c1e53c1a3/favorites 401 (Unauthorized) 

Pour chansons, les ACLs sont:

"acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "administrator", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW" 
    }] 

Pour les comptes, les ACLs sont:

"acls": [ 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW", 
     "property": "POST" 
    } 
    ] 

Je l'ai retracé il:

loopback:security:role isInRole(): $everyone +0ms 
    loopback:security:access-context ---AccessContext--- +2ms 
    loopback:security:access-context principals: +1ms 
    loopback:security:access-context principal: {"type":"USER","id":"584e6ed148d44a6c1e53c1a3"} +0ms 
    loopback:security:access-context modelName Account +1ms 
    loopback:security:access-context modelId 584e6ed148d44a6c1e53c1a3 +0ms 
    loopback:security:access-context property __create__favorites +0ms 
    loopback:security:access-context method __create__favorites +0ms 
    loopback:security:access-context accessType WRITE +0ms 
    loopback:security:access-context accessToken: +0ms 
    loopback:security:access-context id "QD2gi3uUr7g07EN7NhCbeSeyKT4AEZGWUoQQB9V0siFzgBOiPM1WOAkLhvxHCQGq" +0ms 
    loopback:security:access-context ttl 1209600 +0ms 
    loopback:security:access-context getUserId() 584e6ed148d44a6c1e53c1a3 +0ms 
    loopback:security:access-context isAuthenticated() true +0ms 
    loopback:security:role Custom resolver found for role $everyone +0ms 
    loopback:security:acl The following ACLs were searched: +1ms 
    loopback:security:acl ---ACL--- +1ms 
    loopback:security:acl model Account +0ms 
    loopback:security:acl property * +0ms 
    loopback:security:acl principalType ROLE +0ms 
    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 Account +0ms 
    loopback:security:access-context property __create__favorites +0ms 
    loopback:security:access-context accessType WRITE +0ms 
    loopback:security:access-context permission DENY +1ms 
    loopback:security:access-context isWildcard() false +0ms 
    loopback:security:access-context isAllowed() false +0ms 

Merci!

Répondre

1

L'a obtenu! A dû définir l'accès pour la propriété spécifique parce que par défaut est refuser l'accès.

{ 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW", 
     "property": "__create__favorites" 
    }, 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW", 
     "property": "__get__favorites" 
    }