Ich habe eine Windows authentifizierte MVC-Anwendung mit einer Repository-Schicht. Die gesamte Interaktion des Controllers mit der Datenbank erfolgt über das Repository. Jeder Controller weist einen Verweis auf das Repository:Muster für die Autorisierung im Repository-Layer der MVC-Anwendung
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);
}
}
Meine Frage ist, ob es ein guter Weg ist meine Berechtigungslogik in die Repository-Schicht zu bewegen. Ich möchte, dass die Funktion Repository.DeletePost()
sich weigert, Beiträge zu löschen, die nicht vom authentifizierten Benutzer erstellt wurden. Das Problem ist, dass mein Repository nicht weiß, wer der authentifizierte Benutzer ist. Der Controller weiß (über Controller.User
).
die Controller.User
in den Repository
Konstruktor nicht funktioniert, weil die Controller.User
ist offenbar nicht zu dem Zeitpunkt definiert, wenn der Konstruktor aufgerufen wird.
Wie kann ich die Repository
darüber informieren, wer der authentifizierte Benutzer ist? Wäre es am besten, die Repository
innerhalb jeder Aktion zu konstruieren? Oder ist es eine schlechte Idee, es in der Repository-Ebene zu behandeln?
Dies ist, was ich eigentlich mache, aber ich denke, es hat nicht genug "Entkopplung", da unser Repository jetzt an unseren Benutzer gebunden ist, der eine Art Admin sein könnte, der nichts tun könnte, wenn Sie nicht gerechnet hätten dafür bei jedem Schritt – Worthy7