2014-09-23 16 views
10

Wir möchten HapiJS als unseren API-Server verwenden. Wir brauchen feinkörnige Benutzerrechte, z.B. "Benutzer A kann Feld B bearbeiten" "Benutzer C kann Feld D" für ein bestimmtes Modell/Ressource anzeigen.Gibt es eine mit Hapi kompatible Bibliothek für fein abgestimmte ACL/Benutzerberechtigungen?

Bevor wir anfangen etwas aufzubauen, habe ich nach etwas gesucht, das bereits mit Hapi kompatibel ist.

+0

Haben Sie etwas gefunden? – srlm

+0

Nein, dieses Projekt ist für den Moment in Wartestellung. Werde hier auf irgendwelche Erkenntnisse zurückkommen. – Adamski

Antwort

3

Ich habe vor kurzem an einem ACL-Projekt für hapijs gearbeitet. Es sollte dir einen guten Start bringen. https://www.npmjs.org/package/hapi-authorization

+0

Ich habe nur das Plugin überprüft, und ich habe eine Frage - können Sie es so implementieren, dass Benutzer mehrere Rollen haben können, die nicht hierarchisch sind, sondern auf einer gleichen Ebene, den Zugriff auf verschiedene Teile der Anwendung (sagen wir, manages_users) und manage_products)? Sie könnten eine Konvention haben, dass, wenn Benutzerobjekt .role Eigenschaft hat, es eine einzige Rolle ist; Wenn es .roles hat, dann erwarten Sie ein Array und überprüfen Sie, dass – zappan

+0

Diese Funktionalität ist bereits vorhanden und ist die Standardeinstellung. https://github.com/toymachiner62/hapi-authorization#plugin-config. Wenn Sie Fragen haben, reichen Sie bitte github-Probleme ein, anstatt auf SO zu posten. – Catfish

4

Ich habe gerade einen Artikel gelesen, wo die ACL-Berechtigungen mit den integrierten Bereichen validiert werden.

Hier ist der Link zu dem genannten Artikel: https://blog.andyet.com/2015/06/16/harnessing-hapi-scopes/

Und schnell wieder aufnehmen (das Beispiel aus dem obigen Link verwenden), erhalten Sie ein Benutzerobjekt, das wie so aussieht:

{ 
    "username": "han", 
    "scope": ["door-trash-compactor"] 
} 

Der Bereich kann von dem generiert werden, der Ihre ACL für diesen Benutzer unterstützt. In diesem Fall müssen Sie die Ressource door mit id trash-compactor, die wie so überprüft werden kann:

server.route({ 
    method: 'GET', 
    route: '/doors/{door_id}', 
    config: { 
     handler: function (request, reply) { 
      reply(request.params.door_id ' door is closed'); 
     }, 
     auth: { 
      scope: ['door-{params.door_id}'] 
     } 
    } 
}); 

Der Umfang door-{params.door_id} wird door-trash-compactor übersetzt werden, die wird dann validiert. Han's Anfrage an die Müllverdichtertür ist gültig und er erhält die Nachricht door is closed.

Der Blogbeitrag ist gut geschrieben (viel besser als diese Zusammenfassung) und beschreibt dies im Detail - würde das Lesen empfehlen.