АОП и применение безопасности к элементам пользовательского интерфейса - PullRequest
6 голосов
/ 16 июля 2009

Я работаю над приложением, в котором мы прилагаем все усилия, чтобы разделить проблемы как можно сильнее. Мы обнаруживаем, что сквозная забота о безопасности создает ряд сложностей.

Однако, похоже, что их можно смягчить с помощью атрибутов и аспектно-ориентированного программирования.

Я понимаю, что касается применения аспектов к коду уровня домена, но что, если вы хотите применить его к элементам пользовательского интерфейса? Например, что если я не хочу отображать кнопку, когда у пользователя нет разрешения на выполнение этой функции?

В нашем приложении MVC на этом этапе нам нужно написать (псевдокод следует):

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

Но мы бы хотели управлять отображением с помощью атрибутов AOP AOP, если это возможно.

Есть идеи?

Кроме того, если есть сторонние инструменты с открытым исходным кодом, которые были бы полезны, эти предложения приветствуются.

1 Ответ

1 голос
/ 16 июля 2009

Я бы сказал, что представление не должно содержать много программ (или вообще ничего). Идея использования АОП (или а-ля АОП) в местах, где Р запрещен, выглядит не очень хорошо.

Давайте спроектируем это по-другому. Обычно представления имеют некоторые управляющие ключевые слова для выполнения основных задач: условий и циклов. Больше интеллекта, и я бы сказал, что вы смешиваете роль диспетчера.

Итак, if (user.CanSeeSomeData) вы положите туда, если это на самом деле простой флаг. Так должно быть.

Когда вы строили объект вида модели (контейнер, в который вы помещаете информацию для вида). Вы могли бы использовать AOP для инициализации / установки этой информации, например, с хорошим атрибутом в этом свойстве.

Вы можете запросить атрибуты вместо "ifs"

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

Это похоже на синтаксический сахар, а не на настоящий АОП. Любая попытка сказать, что UserCanSeeData должна иметь больше, чем if (например, доступ к базе данных для проверки привилегий пользователя), является попыткой переместить код контроллера в представление.

...