Sommario: Devo autorizzare le pagine in base ai dati presenti nella stringa di query di un url, non solo il nome della pagina.Autorizzazione basata su dati in ASP.NET
Background:
Diciamo che sto costruendo un sistema di inventario della libreria. Gli utenti possono essere creati e assegnati a una singola libreria in un ruolo di amministratore o utente. Esistono centinaia di librerie concorrenti nello stesso database, quindi è importante garantire che gli utenti di una libreria non possano visualizzare l'inventario da un'altra libreria.
In questo momento sto utilizzando una configurazione ASP.NET piuttosto standard: Autenticazione moduli tramite SqlMembershipProvider. Autorizzazione che utilizza SqlRoleProvider, configurato tramite le sezioni <authorization>
nel web.config. Taglio di sicurezza con il provider di SiteMap per nascondere pagine non autorizzate.
Per controllare le informazioni di inventario da perdite, sto verificando manualmente l'ID di libreria associato di un utente con ogni query di inventario. Funziona, ma è noioso e soggetto a errori. Ci deve essere un modo migliore.
Domanda:
Ora gli utenti hanno la possibilità di creare "collezioni" arbitrari all'interno di una libreria. (Ad esempio, la raccolta A contiene Libri 1, 2, & 3). Gli amministratori desiderano poter concedere l'accesso Amministratore/Utente alle singole raccolte, non solo all'intera libreria.
Quindi, se un utente passa a www.com/Book.aspx?BookId=1
, il sistema deve assicurarsi che l'utente disponga delle autorizzazioni per la raccolta di "Libro 1" prima di mostrare la pagina. Se visitano www.com/Reviews.aspx?ReviewId=23, devo assicurarmi che la recensione riguardi un libro che si trova in una raccolta che hanno il permesso di visualizzare.
1) Come posso implementarlo nel modo più standard possibile con ASP.NET?
Controllo manuale all'interno di una pagina di base?
Un HttpModule personalizzato?
Un fornitore di ruolo personalizzato?
Non sono interessato a come memorizzare le autorizzazioni di amministratore/utente, ma piuttosto come/dove autorizzare in base a tali autorizzazioni. (esempi su come implementare una di queste sono apprezzati)
2) a complicare ulteriormente, mi piace ancora per motivi di sicurezza per verificare se l'utente dispone di diritti di amministratore su qualsiasi raccolta o libreria e nascondere l'amministratore pagine se non lo fa.
+1 per formattare la tua domanda così incredibilmente bene! – user279521
@ user279521: Grazie :) – Greg