2017-07-30 7 views
0

Nouveau sur Loopback, j'ai essayé de créer une API simple avec un modèle utilisateur et un modèle todo.HasMany point d'entrée de relation non autorisé sur Loopback

Le modèle utilisateur, nommé Todoer, est basé sur le modèle utilisateur intégré. créer un todoer, login, déconnexion, etc fonctionne comme un charme. Le modèle Todo est basé sur PersistedModel sans ACL pour le moment.

J'ai fait une Appartient Pour relation de modèle Todo à Todoer modèle d'avoir une propriété. J'ai fait aussi un hasMany relation de Todoer à Todo pour être en mesure de récupérer tous les todos d'un utilisateur par l'intermédiaire du point final GET/Todoer/{id}/todos

Avec un todoer connecté Avec le bon jeton et l'id, je peux facilement avoir des réponses de points de terminaison Todoer réservés aux utilisateurs connectés, comme par exemple GET /Todoer/{id}, donc je suis sûr que le mécanisme d'authentification fonctionne bien.

Mais chaque fois que je veux frapper GET /Todoer/{id}/todos, j'obtiens seulement un message d'erreur indiquant que je ne suis pas autorisé. Je suis toujours sûr d'avoir donné le bon jeton et l'identifiant Todoer obtenu lors de la connexion.

Même si je fais un grand ACL disant OK à tout à tous sur le modèle Todoer, il arrive la même chose.

Qu'est-ce que j'ai manqué? Je ne peux pas le comprendre ...

Merci pour votre aide ...

+0

Pouvez-vous partager vos listes de contrôle d'accès ou même les fichiers 'Todoer.json',' Todo.json' complets? Il semble bien sur une première vue. Lors de l'accès à un modèle associé, l'ACL active est toujours celle du modèle que vous appelez. Donc permettre à tous sur "Todoer" devrait ouvrir "Todo" complètement lié. –

+0

Ok. Voici le todoer.json: '{name": "Todoer", ' ' "base": "Utilisateur", ' ' "idInjection": vrai, ' ' "options": {' ' "validateUpsert": true' '},' ' "propriétés": {},' ' "" validations: [],' ' "relations": {' ' "todos": {' ' "type":" hasMany "' ' "modèle": "Todo",' ' "foreignKey": "todoerId"' '}' '},' ' "acls": [' '{' '" accessType ":" * ",' '" principalType ":" ROLE ",' '" princ ipalId ": "tout le monde $",' ' "autorisation": "Allow"' ' }' ' ],' ' "méthodes": {}' ' }' – stefsouron

+0

Et voici le todo.json: { "name": "Todo", "base": "PersistedModel", "idInjection": true, "options": { "validateUpsert": true }, "propriétés": { " texte ": { "type": "string", "nécessaire": true} , "done": { "type": "booléen", "par défaut": false } }, "validation": [], "relations": { "todoer": { "type": "belongsTo", "modèle": "Todoer", "foreignKey": " todoerId » }} , "acls": [], "méthodes": {}} – stefsouron

Répondre

0

Vous devez prendre en compte ACLs d'un modèle intégré User. Vous êtes en train de courir dans sa règle générale DENY ACL. Il est prioritaire par rapport à votre règle ACL générale ALLOW (docs sur Priorité aux règles ACL).

Vous pouvez écrire une règle ACL plus spécifique pour l'obtenir (docs sur Accès aux modèles associés).

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property": "__get__todos" 
} 

Une autre option, qui pourrait être dans ce cas plus commode et sûr, est d'utiliser un rôle $owner dynamique sur lui-même Todo (docs sur rôles dynamiques).

{ 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$owner", 
    "permission": "ALLOW" 
} 

Si vous voulez comprendre ce qui se passe au sujet de ACLs dans votre application, il est très utile pour définir une variable d'environnement DEBUG-loopback:security:* pour activer la journalisation de sécurité assez vaste.

+0

Merci beaucoup, maintenant ça marche parfaitement, je n'ai pas compris que l'ACL de refus du modèle utilisateur intégré a pris le pas sur ma règle de subvention. to the GET todoers/id/todos aux utilisateurs authentifiés, et il va maintenant exactement comment je le voulais Ha ve une bonne journée! – stefsouron

+0

Génial. Si cette réponse a résolu votre problème, pouvez-vous s'il vous plaît [accepter] (https://stackoverflow.com/help/someone-answers) il? –