In un'applicazione MVP, quale dovrebbe essere il modo più appropriato per implementare la restrizione ad alcune azioni dell'interfaccia utente in base ai privilegi dell'utente corrente?
Ad esempio, in una sicurezza basata sui ruoli, diversi ruoli avranno un accesso diverso ad alcune interazioni dell'interfaccia utente nella stessa vista. Se, ad esempio, disponiamo di un negozio online, nella pagina dell'elenco dei prodotti i clienti possono solo visualizzare i dettagli e aggiungere articoli al loro carrello, ma un amministratore deve essere presentato anche con i pulsanti Add Product
e Delete
su ciascun elemento .
Domande simili sono già state poste qui ma l'OP chiede che l'interfaccia utente effettui i controlli di autorizzazione. Sono certo che l'interfaccia utente (view) non dovrebbe essere responsabile della convalida del permesso, ma deve ancora sapere se visualizzare o meno determinati componenti dell'interfaccia utente. Quindi, c'è un modello ben definito o ampiamente adottato per dire alla vista quali interazioni UI dovrebbe non consentire? Posso pensare ad alcune soluzioni, ma se esiste una versione standard e comprovata, preferirei seguirla piuttosto che reinventare la ruota.
Aggiorna
Per chiarire un po 'di più, come suggerito nelle risposte di seguito, sto considerando l'approccio di avere la vista di accettare le informazioni sui privilegi dal presentatore. È la forma di quell'informazione che mi infastidisce: se uso flag come bit mask o qualche rappresentazione troppo generica, io lo farò:
- (+) Ottieni coerenza nel passaggio delle autorizzazioni alla vista
- (-) Accoppia la vista con la logica per risolvere i flag.
L'altra cosa che ho in mente è che la Vista esponga tutte le bandiere di cui ha bisogno come proprietà modificabili per il presentatore (come view.IsDeleteItemAllowed
). Quindi lo farò:
- (+) Non ha una logica aggiuntiva per le autorizzazioni nella vista
- (-) Aggiungi complessità aggiuntiva al relatore per adattare i flag di autorizzazione alle proprietà della vista.
Quindi, sto pensando di utilizzare l'approccio successivo, perché in questo modo posso riutilizzare il presentatore con diverse implementazioni di visualizzazione; e non si baserà sulla vista per capire il sistema di permessi (che può essere soggetto di cambiamenti). C'è qualcosa di cui dovrei preoccuparmi?