Модель авторизации .NET Core: политики, требующие контекста из запроса

Я только начал изучать модель безопасности .NET Core. Это кажется намного лучше, чем предыдущие модели (мне действительно нравится идея политики, роли очень ограничивали ИМО), но документация, похоже, не описывает то, что я хотел бы сделать ... Я надеюсь, что я ' Я бы хотел сделать это, но я не знаю, есть ли это.

Я создаю приложение, в котором пользователи могут создавать «организации» и приглашать других пользователей присоединиться. И наоборот, пользователи могут подать заявку на вступление в организацию.

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

Проблема, которую я вижу, заключается в том, что, похоже, нет никакого способа сделать политику "осведомленной" о контексте запроса, чтобы она могла проверить идентификатор организации и подтвердить, что пользователь является членом этой организации. . Существует ли такой механизм, или концепция политики не подходит для этого подхода?


person Jeremy Holovacs    schedule 16.01.2017    source источник


Ответы (1)


Вы можете использовать IHttpContextAccessor, вводить его куда угодно и использовать для получения контекста.

В вашем Startup.cs:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

И инъекция:

public class CustomClass 
{
     private readonly IHttpContextAccessor _contextAccessor;

     public CustomClass(IHttpContextAccessor contextAccessor) 
     {
           _contextAccessor = contextAccessor;
     }
}
person Dawid Rutkowski    schedule 16.01.2017
comment
Похоже, что HttpContext уже доступен через context.Resource. Проблема в том, что это, похоже, происходит до привязки или проверки модели. Ух, это так же уродливо, как и AuthorizationActionFilters. - person Jeremy Holovacs; 16.01.2017