modello di controllo degli accessi basato sui ruoli in object oriented

2

Voglio preparare un'applicazione swing. Sto progettando un modello di controllo degli accessi basato sul ruolo nella progettazione di mvc.

Quando una vista vuole richiedere qualcosa da un controller, come può questa richiesta essere realizzata in modo orientato agli oggetti. Cioè, mentre si richiede come possono essere inviate le informazioni di sessione dell'utente al modello o al controller?

Ad esempio, un metodo model può essere così

createCustomeraccount(EntityCustomer obj, Session user)

quindi tutti i metodi nelle classi modello dovrebbero avere un parametro oggetto sessione che ha informazioni sul ruolo dell'utente e anche il ruolo e i diritti devono essere archiviati in una classe per verificare il diritto dell'utente. Pertanto, ogni modello ha un oggetto di tipo roleright che include il ruolo e il mapping di destra.

Questo design è corretto?

    
posta engtuncay 12.05.2015 - 16:03
fonte

1 risposta

1

Probabilmente sarà molto più semplice per te se non dovessi passare la Sessione ad ogni chiamata di metodo su un controller. Questo pone l'esigenza di mantenere la Sessione alla vista e non è proprio dove essa appartiene. Rende anche i metodi del controller molto pesanti in quanto dovranno sempre avere questo parametro, anche se non ha senso.

Invece, perché non impostare questa "sessione" quando l'utente accede all'applicazione e la rende disponibile attraverso una classe? Nel modello più semplice il tuo controller potrebbe avere un 'SessionContext' o 'UserContext' iniettato nel costruttore e ogni metodo potrebbe chiamare quel contesto e convalidare l'autorizzazione per chiamare il metodo, generando eccezioni se i requisiti non sono soddisfatti.

public class CustomerController
{
    private UserContext _context;

    public CustomerController(UserContext context)
    {
            _context = context;
    }

    public void createCustomerAccount(EntityCustomer obj)
    {
        if(!_context.isUserAdmin())
            throw new UnauthorizedMethodException("User not authorized to call createCustomerAccount");

        //do your thing
    }   
}

(Non Java, ma hai un'idea)

I metodi più avanzati per fare ciò potrebbero includere l'utilizzo di un approccio guidato dagli oggetti di comando o l'utilizzo di Aspetti sui metodi.

    
risposta data 12.05.2015 - 16:44
fonte

Leggi altre domande sui tag