#asp.net-web-api #authorization
#asp.net-web-api #авторизация
Вопрос:
Мне нужно предоставить пользователям разрешения для вызова точных действий. А также каждое правило разрешения может содержать правила проверки для аргументов действия:
[CustomAuth]
public MyController : ApiController
{
[ValidateAccess, ActionName("Myaction")]
public void MyAction([MyTypeAccess] MyType myType)
{
}
}
В моей логике мне нужно проверить, может ли пользователь вызвать это действие и может ли он вызвать это действие с переданным значением MyType (пользовательская проверка).
На данный момент я не вижу, как получить атрибуты из пользовательского AuthorizeAttribute, и я вижу решение с перехватчиками Castle, которые я использую для других своих целей (из информации о вызове)..
Существует ли стандартный способ реализации этой пользовательской авторизации?
Ответ №1:
Не нашел прямого решения в Web API для этой проблемы.
Поскольку я использую перехватчики Castle, я добавил новый перехватчик на все контроллеры, которые поддерживают аутентификацию. Перехватчик предоставляет доступ к вызову, и вы можете получить любой атрибут и значение, переданные контроллеру / действию.
Атрибут проверки действия говорит, что вам нужно применить процедуры проверки к этому вызову, ActionName определяет тип вызова (при необходимости, в будущем это будет перенесено в собственный атрибут, поскольку имя действия может отличаться в устаревших контроллерах для старых версий).
Если вам нужно проверить параметры действия, вы можете использовать набор атрибутов, которые определяют тип аргумента и алгоритм проверки.