Как обрабатывать авторизацию при использовании NHibernate в .NET - PullRequest
2 голосов
/ 20 ноября 2008

Я использую шаблон репозитория для запроса нашей базы данных с использованием NHibernate. Это позволяет легко делать такие вещи, как:

public T GetById (int id) {...}

Но это мало помогает, когда кто-то начинает копаться в строках запроса, чтобы увидеть вещи, которые ему запрещены.

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

Например, блог -> автор -> пост -> комментарий. В этом надуманном примере мы хотели бы дать авторам возможность редактировать свои посты и комментарии к этим постам, но не видеть и не редактировать посты других авторов. Легко проверить, что сообщение принадлежит автору, немного сложнее убедиться, что комментарий принадлежит автору. У нас есть несколько примеров, которые идут глубже.

Итак ... как нам сделать авторизацию (в модели или в репозитории)?

Ответы [ 2 ]

1 голос
/ 20 ноября 2008

Вы могли бы реализовать шаблон Decorator - я предполагаю, что вы используете контейнер DP / IoC для внедрения своих IRepositories?

Вы бы создали ISecureRepository, который проверяет, что сделанные вызовы действительны для определенного типа пользователя / запроса, а затем передает вызов обратно в IRepository. Это также дает вам возможность вызвать метод, а затем проверить тип возвращаемого значения ...

Затем вы настроите IoC для использования ISecureRepository, обернутого вокруг IRepository ...

Звучит так просто ...

0 голосов
/ 26 февраля 2009

Это может быть хорошей реализацией для ваших нужд: http://www.codeproject.com/KB/web-security/objectlevelsecurity.aspx, это модель на основе ACL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...