Как обрабатывать авторизацию при использовании NHibernate в .NET

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

публичный T GetById(int id) {...}

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

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

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

Итак… как мы делаем авторизацию (в модели или репозитории)?


person Kyle West    schedule 19.11.2008    source источник


Ответы (2)


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

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

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

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

person kͩeͣmͮpͥ ͩ    schedule 20.11.2008

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

person Community    schedule 26.02.2009