2014-12-12 6 views
9

Uso gli elettori per verificare se un utente ha le autorizzazioni corrette per eseguire una determinata azione su un'entità.Verifica autorizzazione sulla panoramica impaginata per entità

Le azioni CRUD sono facili da controllare. Ma come faccio a verificare le autorizzazioni sui set di risultati o panoramiche. Le panoramiche utilizzano l'impaginazione con PagerFanta per impaginare i risultati. Il controllo preliminare dei risultati non sarà possibile a causa di problemi di prestazioni. Solo il controllo dei risultati restituiti in paginazione potrebbe portare a pagine vuote o semivuote.

Sto pensando di inserire la stessa convalida nel mio repository in modo da restituire solo i risultati che gli utenti sono autorizzati a vedere. Ma questo crea la duplicazione del codice perché la stessa validazione è ora duplicata, una volta in un elettore e una volta in un repository.

C'è una soluzione migliore a questo o non sono gli elettori la soluzione migliore per questo?

+0

È possibile specificare il repository come servizio e iniettare sicurezza per accedere all'elettore lì. – Jindra

risposta

1

Ah, lo stesso "impaginazione con condizioni" vecchio problema, ora per la nuova era :)

(non credo che anche Google ha risolto, btw. A volte si vede più pagine nella loro produzione impaginazione , quindi ottieni effettivamente).

Ora, ovviamente, il problema nel tuo caso è che Voter non ti aiuterà in alcun modo, perché non è per il tuo problema - è usato per controllare l'accesso a livello di oggetto, ma devi eseguirlo sul sql/dql/livello di query. E la più grande differenza è che, invece di restituire l'astensione, negata o concessa, il tuo metodo dovrà restituire le condizioni di dql. Quindi il compito è separato.

Ciò che si può fare, tuttavia, è aggiungere una funzione che restituirà tali condizioni nella classe del votante e inserirla nel repository. Almeno in questo modo - la tua logica di accesso per lo stesso oggetto sarà nella stessa classe.