2013-04-17 11 views
6

Sto creando un'API con diversi livelli di accesso, il "client" può solo essere letto. Ma "admin" deve avere accesso in scrittura. I diversi ruoli vengono controllati ogni volta come criterio in Sails.js e impostano i diritti nella req.session.Autenticazione Sails.js per azioni modello

Ho solo bisogno di dare al 'client' alcun accesso per creare, aggiornare ed eliminare azioni, quindi ho creato un controller che ha quelle azioni CRUD e controlla se l'utente ha il ruolo giusto. Tutte le azioni con accesso limitato vengono reindirizzate tramite routes.js a questo controller.

Ora il mio problema è che quando sto eliminando una voce come: Category.destroy (req.param ('id')); Mi dà undefined e non ha alcun metodo fatto. A differenza di cui parla la documentazione sono riuscito a risolvere il problema con la creazione di questo:

var deleted = Category.destroy(req.param('id'), function(err, status) { 
    if (status == 1){ 
     res.json({message: 'Category is deleted'}); 
    } else { 
     res.json({message: 'Oops, something went wrong'}); 
    } 
    }); 

Ma ci deve essere un altro modo per applicare l'autenticazione a quelle azioni di base. Perché ora devo scrivere tutte le azioni.

C'è qualcosa di sbagliato nel codice per la funzione di cancellazione che ho scritto? Ed è possibile applicare politiche e reindirizzare a azioni di modello predefinite, come se non esistesse affatto l'autenticazione?

risposta

2

appena modificato tutto le policy en hanno rinominato i controller, come indicato in CLI: 'vele generano esempio di modello' fornisce una notifica sul controller che viene nominato come singolare. Quindi non ho bisogno di reindirizzare tutte le azioni del modello al plurale controller (esempi). Ora tutte le azioni CRUD di base stanno funzionando come dovrebbero.

il video tutorial sails.js mi ha aiutato molto: http://www.youtube.com/watch?feature=player_embedded&v=GK-tFvpIR7c

0

mia ipotesi (non un utente Sails io) si sarebbe sia passare un callback, o otterrete un oggetto posteriore che ha un metodo done():

Category.destroy(id, function(...) {...});  // method 1 
Category.destroy(id).done(function(...) {...}); // method 2 
+0

Grazie per la risposta. Penso che il reindirizzamento all'interno delle vele fosse una parte delle azioni non funzionanti correttamente. Ora con la nuova riscrittura funziona come dovrebbe. Ma grazie per il tuo tempo! – Loed

11

È possibile definire le politiche a livello Models o Controllers. Ecco un esempio dello /config/policies.js.

module.exports.policies = { 
    // Default policy (allow public access) 
    '*': true, 
    'events': 'eventsPolicy', // Policy for a Model 

    someController: { // Policy for a Controller 
     // Apply the "authenticated" policy to all actions 
     '*': 'authenticated', 

     // For someAction, apply 'somePolicy' instead 
     someAction: 'somePolicy' 
    } 
}; 

Sotto la api/policies è dove è possibile definire il livello di accesso.

module.exports = function (req, res, next) { 
    if (req.session.user) { 
     var action = req.param('action'); 
     if (action == "create") { 
      req.body.userId = req.session.user.id; 
      req.body.username = req.session.user.username; 
     } 
     next(); 
    } else { 
     res.send("You're not authenticated.", 403); 
    } 
}; 

Spero che questo aiuti.

Problemi correlati