Bei dieser Frage geht es darum, Regeln meiner Bewerbung anzuwenden, die mich verwirren.
Mein Controller verwendet den Dienst und der Dienst verwendet das Repository.
public class CommentController: ApiController{
[HttpPost]
public bool EditComment(Comment comment){
commentService.Update(comment);
}
}
public class CommentService{
ICommentRepository repository;
....
....
public void Update(Comment comment){
repository.Update(comment);
}
}
Wenn der Benutzer authentifiziert ist, kann er einen Kommentar aktualisieren.
Ein Benutzer sollte jedoch eigene Kommentare bearbeiten.
Ein Administrator kann jedoch alle Kommentare bearbeiten.
Ein Kommentar kann jedoch nach einem bestimmten Datum nicht mehr bearbeitet werden.
Von einer Abteilung bearbeiten
Und ich habe so etwas wie diese Regeln.
Wenn ich die Regel "Benutzer bearbeitet eigenen Kommentar" in der Serviceschicht anwende, ändere ich die Aktualisierungsmethode und übergebe den Parameter des Controllers User.Identity.Name,
public class CommentService{
ICommentRepository repository;
....
....
public void Update(string updatedByThisUser, Comment comment){
// if updatedByThisUser is owner of comment
repository.Update(comment);
}
}
Aber ändert sich der Servicebetrieb tatsächlich nach Regeln?
Ich bin etwas verwirrt darüber, wo ich die Regeln anwenden kann. Im Controller oder im Service oder im Repository.
Gibt es eine Standardmethode, um dies wie Designmuster zu tun?
[Authorize(Roles="member, admin")]
und jetzt sind alle Aktionsmethoden im Controller nur für Benutzer in der Rolle "Mitglied" oder "Administrator" zugänglich.