【发布时间】:2014-09-12 15:28:36
【问题描述】:
将 webapi 与表单身份验证结合使用(我知道这可能听起来很奇怪,但这正是我所需要的)。
我有一条这样的路线:
[Route("{application}/orders}"]
public IHttpActionResult Get(string application) {
var orders = OrderService.GetOrders(application); // return list of orders of applicaiton.
return Ok(orders);
}
示例场景: 用户 John 有权查看应用程序“CoolApp”的订单 用户 Leia 有权查看应用程序“Robin”的订单 用户 Tristan 没有查看订单的权限。
在数据库上就像一个角色 - 资源关系。 用户角色:
User - Role - Application
=====================================
John - OrdersManager - CoolApp
Leia - OrdersManager - Robin
Tristan - OtherRole - Robin
我希望该路由检查用户是否有权获取该特定应用程序的订单。
我读到这个:Resource based authorization in .net,看起来很有希望。
首先,我不确定是否应该使用AuthorizeAttribute、AuthorizationFilterAttribute 或IAuthorizationFilter 进行扩展,很遗憾,这里简要说明了http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api,信息不多。
第二,我读到绑定发生在授权之后,所以我不知道如何从 RouteData 获取值,因为我在路由数据上定义了 {application},我想我应该能够访问它。 MVC 的示例很少,但无法为 web api 获取一个示例,并且在 actionContext 对象中到处都是请求和上下文等对象,我不确定从哪里获取它以及如何以正确的方式获取它。
最后但并非最不重要的一点是,我应该覆盖所选扩展点的哪种方法。如果它同时具有异步和同步,我应该同时覆盖两者吗?
奖励:由于授权将依赖我的repository,如果可能的话,知道如何将其注入过滤器会很棒。 (我没有使用任何 IoC 容器)。
【问题讨论】:
标签: c# asp.net asp.net-web-api