Ho un Windows autenticato applicazione MVC con uno strato repository. Tutte le interazioni da parte del controllore con il database vengono effettuate tramite il repository. Ogni controller ha un riferimento al repository:modello per fare l'autorizzazione a livello di repository di applicazione MVC
public class PostController : Controller
{
private Repository db = new Repository();
[HttpPost]
public ActionResult DeletePost(int id)
{
// Authorize that the user is allowed to delete this post...
db.DeletePost(id);
}
}
La mia domanda è se ci sia un buon modo per spostare la mia logica di autorizzazione nello strato repository. Mi piacerebbe che la funzione Repository.DeletePost()
rifiutasse di eliminare i post che non erano stati creati dall'utente autenticato. Il problema è che il mio repository non sa chi è l'utente autenticato. Il controller conosce (tramite Controller.User
).
Passando il Controller.User
nel costruttore Repository
non funziona, perché il Controller.User
è a quanto pare non definita nel momento in cui il costruttore viene chiamato.
Come posso informare il Repository
di chi è l'utente autenticato è? Sarebbe meglio semplicemente costruire il Repository
all'interno di ciascuna azione? O è una cattiva idea gestirlo nel livello repository?
Questo è ciò che effettivamente sto facendo, ma sento che non ha abbastanza "disaccoppiamento" come ora il nostro repository è legato al nostro utente, che potrebbe essere una specie di Admin che non sarebbe in grado di fare nulla a meno che tu non avessi contabilizzato per esso ad ogni passo – Worthy7