Я создал специальный авторизованный атрибут, отвечающий за проверку того, имеет ли пользователь доступ к данному ресурсу. Для того, чтобы сделать его универсальным, мне нужно две переменные, передаваемые в атрибут:Передача параметра маршрута в пользовательский атрибут
- Запрашиваемый тип ресурса
- запрашиваемый ресурс ID
Я могу легко сказать, атрибут, который был требуемый тип ресурса , но как передать запрошенный идентификатор в атрибут? Вот мой код, только с последней переменной недостающего (помеченных ?
):
[System.Web.Http.Authorize]
[System.Web.Http.RoutePrefix("api/accounts")]
public class AccountController : ApiController
{
[AuthorizeIsOwnResource(ResourcesType = ResourcesTypes.Account, ResourceId = ?)]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("test/{id}")]
public ActionResult Test(string id)
{
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
Любые предложения? Я предполагаю, что я мог бы удалить параметры атрибута все вместе и определить требуемый тип ресурса и ID из HttpContextBase
в AuthorizeCore
; но это мой единственный вариант?
У вас есть ответ. Я считаю, что лучшим решением является доступ к именам контроллеров и действий из HttpContextBase. Он чище, проще в реализации и меньше подвержен ошибкам. –
Поразмыслив над проблемой, я думаю, что вы абсолютно правы. Я думаю, что я даже могу извлечь RouteData из HttpContextBase. Я отправлю решение после проверки – MichaelCleverly