2009-07-15 10 views
6

Pracuję nad aplikacją, w której staramy się zachować separację problemów tak mocno, jak to możliwe. Przekonujemy się, że przekrojowe obawy związane z bezpieczeństwem powodują szereg komplikacji.AOP i stosowanie zabezpieczeń do elementów interfejsu użytkownika

Jednak wygląda na to, że można je złagodzić za pomocą atrybutów i programowania zorientowanego na aspekt.

Rozumiem to w zakresie stosowania aspektów do kodu warstwy domeny, ale co zrobić, jeśli chcesz zastosować go do elementów interfejsu użytkownika? Na przykład, co jeśli nie chcę wyświetlać przycisku, gdy użytkownik nie ma uprawnień do wykonania tej funkcji?

W naszej aplikacji MVC, w tym momencie musielibyśmy napisać (pseudo-kod poniżej):

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

Ale chcielibyśmy, aby kontrolować wyświetlanie z atrybutami a la AOP, jeśli to możliwe.

Wszelkie pomysły?

Ponadto, jeśli istnieją narzędzia stron trzecich, o otwartym kodzie źródłowym, które byłyby przydatne, sugestie te są mile widziane.

Odpowiedz

1

Powiedziałbym, że widok nie powinien zawierać dużego programowania (lub w ogóle nic). Pomysł użycia AOP (lub a la AOP) w miejscu, gdzie P jest zabronione, nie wygląda ładnie.

Zaprojektujmy to w inny sposób. Zwykle widoki mają pewne słowa kluczowe kontrolujące, aby wykonać podstawowe czynności: warunki i pętle. Więcej inteligencji i powiedziałbym, że mieszacie tam rolę kontrolera.

Tak więc umieszczasz tam, jeśli jest to w rzeczywistości prosta flaga. Tak powinny wyglądać widoki.

Podczas budowania obiektu widoku modelu (kontener, w którym umieszczana jest informacja do widoku). Mogłeś użyć AOP do zainicjowania/ustawienia tych informacji za pomocą ładnego atrybutu w tej właściwości, na przykład.

Można prosić o atrybutach zamiast „FI”

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

To wygląda jak cukier składniowej, a nie prawdziwy AOP. Każda próba stwierdzenia, że ​​UserCanSeeData powinna mieć więcej niż wartość if (jak dostęp do bazy danych w celu sprawdzenia przywilejów użytkownika), jest próbą przeniesienia kodu kontrolera do widoku.

+0

dzięki za odpowiedź, graffic. Więc, czy mówisz, że podejście atrybutów jest w porządku, ale powinno być zrobione w Conroller/ViewModel, czy też mówisz, że instrukcja if to sposób? * [To jest sposób w jaki widoki powinny być "] * – jlembke

+0

Ponadto, w jaki sposób można to osiągnąć w ViewModel? Mogę umieścić atrybut na właściwości, ale to nie przekłada się na pokazywanie/ukrywanie/wyłączanie elementów formularza. Czy mówisz, że ja * nie powinien * staram się ukryć kontroli w ogóle, ale po prostu obsługiwać naruszenia dostępu w ViewModel/Controller? – jlembke

Powiązane problemy