Qual è il modo consigliato di recuperare un elenco di tutte le risorse a cui un utente ha accesso?- restituire un elenco di risorse autorizzate
In molti esempi che ho visto, l'autorizzazione viene inserito in un servizio separato - spesso uno che espone un metodo simile a isAuthorized(), che può essere utilizzato per le query individuali ("è l'utente autorizzato ad utilizzare risorse ABC ? ") così come le query di massa (" L'utente è autorizzato a utilizzare uno qualsiasi dei seguenti elenchi di risorse? ").
Mentre il autorizzazione logica esiste nel servizio di autorizzazione, il attuazione dei criteri di autorizzazione è conservato all'interno dell'applicazione stessa (ad esempio, le imprese-logic layer per l'effettiva implementazione accesso alla risorsa, in base al risultato dal servizio di autorizzazione o dal livello di presentazione per mostrare/nascondere le singole opzioni in base al risultato del servizio di autorizzazione, ecc.).
Qual è il modo migliore di farlo se, ad esempio, il mio livello di accesso ai dati ha potenzialmente miliardi di "risorse" che potrebbe restituire? Il mio livello logico di business esegue una query su tutti i dati (passandoli tutti sulla rete), quindi inoltra tale lista gigante al servizio di autorizzazione (di nuovo attraverso la rete), solo per ottenere una lista gigante di "ALLOW/DENY" rimandato alla logica aziendale? Ovviamente non suona abbastanza bene.
Si tratta di un caso in cui non è possibile separare "pulito" l'accesso ai dati, la logica di autorizzazione e la logica aziendale? Dovrei invece chiedere al mio livello di accesso ai dati di restituire solo a me un elenco di tutte le risorse a cui l'utente ha accesso, che potrebbe finire per essere implementato come un semplice join di database, ma richiederebbe quindi una parte della logica per determinare chi ha accesso a quali risorse in quali condizioni (vale a dire, le politiche di autorizzazione) essere incorporate nel codice di accesso ai dati e quindi tali politiche sarebbero diffuse attraverso la mia base di codice (ad esempio, una qualche logica di autorizzazione sarebbe nel mio Data-Access Livello, alcuni sarebbero nel mio livello di autorizzazione, ecc.)?
Forse le prestazioni superano l'architettura "pulita", ma c'è un modo migliore per farlo?
Sono di fronte a un enigma simile con una grande app legacy su cui sto lavorando. Lo scenario del "grande set di risultati" è complicato, e sicuramente non penso che sia un non-problema come implica sJhonny. Anche se un set di risultati di ** tutti ** i record potrebbe non essere un buon progetto, hai ancora il problema se vuoi fornire un conteggio dei record o il conteggio delle pagine (e un buon design * dovrebbe *). Ciò diventa ancora più difficile se il tuo livello dati è basato su una tecnologia diversa, ad esempio, le stored procedure SQL. Anche se ti concedi di duplicare la tua logica di autorizzazione, è in una lingua diversa! – Snixtor