2017-11-28 4 views
0

Ich habe zwei Benutzer in der Datenbank und sie haben die gleiche E-Mail-Adresse und das gleiche Passwort, aber verschiedene Rollen. Es wie folgt aussehen:Login von Rollen Federn-Authentifizierung

email  pass roles 
+------------+------+------- 
[email protected] 123 user 
[email protected] 123 admin 

und wenn Benutzer versuchen einzuloggen, i senden Anfrage mit params

{ 
    email:"[email protected]" 
    password:"123" 
    roles:"user" 
    strategy:"local" 
} 

Die questuin ist: wie kann ich Benutzer von Rolle zu identifizieren (wenn ich von front- senden Ende req mit param Rollen: "user" Benutzer muss durch Rolle "Benutzer" anmelden, wenn Rollen: "admin" - von admin)

Es ist mein Haken von auth

app.service('authentication').hooks({ 
before: { 
    create: [ 
    authentication.hooks.authenticate(['local', 'jwt']) 
    ], 
    remove: [ 
    authentication.hooks.authenticate('jwt') 
    ] 
}, 

Antwort

0

Ein Benutzer (oder andere authentifizierten) Einheit sollte eindeutig identifizierbar sein, so dass es mehr Sinn zu speichern eine Liste von Rollen für einen Benutzer wie dies macht:

email  pass roles 
+------------+------+------- 
[email protected] 123 user,admin 

Und dann kann melden Sie sich mit diesem Benutzer und in einem Haken überprüfen, ob die Rollenliste enthält, was Sie brauchen:

const { Forbidden } = require('feathers-errors'); 

function hasRole(name) { 
    return function(context) { 
    const { user = {} } = context.params; 

    if(!user.roles || !user.roles.split(',').includes(name)) { 
     throw new Forbidden('You are not allowed to access this'); 
    } 
    } 
} 

app.service('myservice').hooks({ 
    before: { 
    get: [ hasRole('user') ], 
    find: [ hasRole('user') ], 
    create: [ hasRole('admin') ], 
    patch: [ hasRole('admin') ], 
    update: [ hasRole('admin') ], 
    remove: [ hasRole('admin') ] 
    } 
}) 
+0

dank für Ihre Antwort, aber das Problem ist durch ein Passwort in Rolle ‚admin‘ in Rolle unterscheidet ‚user‘ – user3383185

+0

Sie könnten in der Lage sein, dies mit einem benutzerdefinierten Verifizierer zu lösen (https://docs.feathersjs.com/api/authentication/local.html#verifier) ​​durch Betrachten des Anfrageobjekts. Ich würde jedoch nicht empfehlen, zwei verschiedene Konten mit demselben Benutzernamen zu verknüpfen. – Daff