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

StackOverflow https://stackoverflow.com/questions/303835

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top