, so habe ich meine Aktion MethodeWie benutzerdefinierte Autorize-Attribut für den folgenden Fall implementieren?
[Authorize(Roles="Admin")]
public ActionResult EditPosts(int id)
{
return View();
}
In meinem Fall muss ich Administratoren genehmigen, so dass sie Beiträge editieren, aber (hier kommt das kühle Teil), ich muss auch der Schöpfer der Post ermöglichen zu können, um den Beitrag zu bearbeiten, der ein normaler Benutzer ist. Also, wie kann ich den Benutzer, der den Post erstellt hat, sowie die Admins herausfiltern, aber die anderen nicht autorisieren lassen? Ich empfange die PostEntry ID als Routenparameter, aber das ist nach dem Attribut und auch Attribute akzeptieren nur konstante Parameter, sieht aus wie etwas sehr schwierig, Ihre Antworten sind sehr geschätzt, Prost!
Da können Sie nicht wissen, wer die Post erstellt, bis Sie es nachschlagen. Es könnte besser sein, diese Logik nach dem Hydratisieren des Objekts hinzuzufügen. Andernfalls, wenn Sie dies als einen Aspekt implementieren, müssen Sie möglicherweise den Post zweimal nachschlagen (einmal für die Autorisierung und einmal für die Bearbeitung). –
ein Punkt gut gestellt, in der Tat werde ich einmal nachschlagen, wenn seine ID auf dem Rolleneintrag ist und wieder meine Controller-Logik zu tun. Irgendwelche Ideen, wie man die Datenbank nur einmal trifft? – Freeman
Denken Sie darüber nach, wenn Sie ein gutes ORM verwenden und den Kontext vor dem Autorisierungsaufruf (nicht sicher über diesen Teil) einstellen, dann sollte er im Cache der 1. Ebene zwischengespeichert werden. Dann sollten Sie auf dem zweiten Hydrat nicht so etwas wie einen Treffer sehen. –