Domanda

Sono sicuro che questo è già stato chiesto e ha risposto quindi mi scuso in anticipo per questo, ma io non sto cercando di capire le parole chiave giuste per la ricerca.La ricerca di "Pattern" colpisce troppi Q & A per essere utile.

Sto lavorando su un test di regressione app.Sto visualizzazione di un form sullo schermo, in base al quale viene effettuato l'accesso all'app alcuni campi devono essere di sola lettura.Così posso astratta di un oggetto campo e posso astratta di un oggetto utente, ma che modello dovrei essere guardando per descrivere l'intersezione di questi due concetti?In altre parole, come posso descrivere che per il Campo 1 e Utente, il campo deve essere di sola lettura?Sembra come di sola lettura (o meno) dovrebbe essere una proprietà del Campo di classe, ma come ho detto, dipende da quale utente sta guardando il form.Ho considerato un semplice array bidimensionale (e.g.ReadOnly[Campo,Utente] = True), ma voglio fare in modo che ho scelto la più efficace struttura per rappresentare questo.

Ci sono software design patterns per quanto riguarda questo tipo di struttura dati?Sto overcomplicating cose ... sarebbe un array bidimensionale essere il modo migliore per andare qui?Come ho detto, se questo è stato chiesto e risposto, mi scuso.Ho fatto cerca ma non ho trovato niente e una ricerca su Google non è riuscito a girare nulla.

È stato utile?

Soluzione

Tabella driven design può essere efficace.Steve Maguire aveva pochi esempi in La scrittura Solido Codice .

Sono anche un ottimo modo per catturare i test, vedere fit .

Nel tuo caso qualcosa di simile:

Field1ReadonlyRules = {
    'user class 1' : True,
    'user class 2' : False
}

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

Come un a parte, probabilmente si vorrà per modello entrambi gli utenti e le classi/gruppi/ruoli invece che la loro combinazione.Tipicamente, un utente cattura che (autenticazione), mentre i gruppi/ruoli di acquisizione cosa (autorizzazioni, capacità)

Altri suggerimenti

A prima vista sembra più come si dispone di due diversi tipi di utenti e hanno diversi livelli di accesso.Questo potrebbe essere risolto con l'ereditarietà (PowerUser, Utente) o contenente un oggetto di protezione o token che imposta il livello per l'utente.

Se non ti piace eredità come una regola, è possibile utilizzare un modello di Stato sull'applicazione, Decorare gli oggetti utente (Brivido) o, eventualmente, aggiungere la strategia di modelli per diversi livelli di sicurezza.Ma mi sembra un po ' presto ancora, io di solito non applicare modelli, fino a quando ho un'idea fissa di come la voce viene coltivato e mantenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top