Ich entwickle eine CMS-ähnliche Anwendung mit MVC 3 (RC2) und bin an dieser Stelle an der Kreuzung. Ich bin nicht in der Lage, mich davon zu überzeugen, ob mein vorgeschlagener Ansatz angemessen ist oder nicht. Ich schätze, es liegt daran, dass ich weiß, dass ich versuche, einige Ecken zu schneiden, die mich später schwer auf der Strecke kosten werden.Anwendungslogik (Platz für Authentifizierung/Autorisierung)
Ich werde richtig runter zu beschreiben, mein Problem:
1) Ich habe eine Ressource (lässt sie A nennen), die editierbar gemacht werden muss.
2) Ich habe ein benutzerdefiniertes Berechtigungssystem implementiert, das 2 hat (von vielen) Berechtigungen:
- Können Eigene Ressourcen bearbeiten
- bearbeiten kann andere Ressourcen
3) Schöpfer der Ressource A ist frei, es zu bearbeiten, wenn sie die Berechtigung 'Eigene Ressource bearbeiten' haben.
4) Ein separater Benutzer kann nur A bearbeiten, wenn sie die Berechtigung ‚Can bearbeiten Andere Ressource‘
Nun, da die Anforderung beschrieben wird, lassen Sie mich Ihnen mein Ansatz sagen bisher:
1) I einen Controller 'ResourceController'
2) ich habe eine Aktion namens 'Bearbeiten'
3) Die Aktion hat ein Attribut auf sie genannt: [CustomerAuthorize (Perm.CanEditOwnResource, Perm.CanEditOtherResource, Alle = true) ]
4) Ich habe eine Serviceklasse, die sich um die Domain-Validierung kümmert.
So kann ein Benutzer die Aktionsmethode aufrufen, wenn er entweder die Berechtigung 'Eigene Ressource bearbeiten' oder 'Kann andere Ressource bearbeiten' besitzt.
Wie kann ich entscheiden (und wo sollte diese Entscheidung getroffen werden), ob der Benutzer die richtige Berechtigung hat oder nicht (abhängig davon, ob sie die Ressource besitzt?) Sollte es in der Controller-Aktion in der Ressourcendienstklasse sein , in einer separaten Serviceklasse?
Warten unterschiedliche Ansichten zu hören ...
Aber ist das doppelte Logik? Haben die gleichen Prüfungen mehrmals wiederholt? Aber ich verstehe deine Sorge. Ich frage mich, ob ich einige OSS-Projekte sehen könnte, um das Muster zu lernen. – kidoman
@ KiD0M4N: Es gibt einige Szenarien, in denen das Wiederholen einiger Logik viel einfacher ist (einschließlich langfristiger Wartungsüberlegungen), als es nicht zu wiederholen. Das heißt, manchmal machen es technische Einschränkungen oder bestehende Designentscheidungen unzumutbar schwierig, sich reinrassig zu machen und sich nicht selbst zu wiederholen. –