2016-12-13 2 views
0

В веб-приложении, над которым мы в настоящее время работаем, у нас есть объект Company, который может редактировать только тот, кто его создал.Ресурсная авторизация

Таким образом, каждый раз, когда вызывается действие EditCompany, мы должны проверить базу данных и посмотреть, является ли текущий зарегистрированный пользователь владельцем компании. Это всего лишь один пример, но у нас есть больше типов разрешений, кроме Владельца, и больше операций с Company.

Мы сделали то, что в начале каждого действия мы вызываем некоторый метод обслуживания, чтобы узнать, требуется ли этому пользователю разрешение для этого ресурса, например companyService.HasEditPermission(userId, companyId), и если это правда, мы продолжаем дальше.

Но недавно мне сказали, что такой код shoudlnt находится в контроллере, но должен быть создан пользовательский атрибут, который обрабатывает эту логику разрешений, а затем мы просто поместим этот атрибут в действие контроллера. Но этот человек не программист Asp.Net, и он не знает, как он должен быть реализован в Asp.Net. Поэтому мой вопрос: возможно ли сделать что-то подобное в Asp.Net, и если да, то как нам это реализовать?

ответ

1

Итак, мой вопрос: возможно ли сделать что-то подобное в Asp.Net, и если да, то как нам это реализовать?

Да, это вполне возможно, и это хороший способ достичь своей цели.

Для этого вам необходимо создать собственный атрибут фильтра, который расширяет класс AuthorizeAttribute и отменяет его метод OnAuthorization. В переопределенном методе вы можете проверить параметры запроса (доступные по параметру filterContext) и запустить свою логику авторизации.

Смежные вопросы