2014-01-16 55 views
1

当用户通过身份验证时,我想阻止他更新/删除/读取从其他帐户创建的数据......通过告诉他您没有权限403!在AuthorizeFilter中获取api控制器构造函数的值

获取ISchoolyearService实例调用其HasUserPermission()方法的最佳方式是什么?

我知道我可以在这里新建SchoolyearService,但这会在我的应用程序中完全无法使用IoContainer。

​​

回答

0

好吧我终于找到了如何从当前请求获得ISchoolyearService :

从DependencyScope获取注册服务!

现在这个属性应该直接放在控制器上。它不需要把它放在动作上,因为我做的http动词中的if/else。

bool canUserExecuteAction = false; 
if (actionContext.Request.Method == HttpMethod.Put) 
{ 
    int targetId = Convert.ToInt32(actionContext.Request.GetRouteData().Values["Id"]); 
    int userId = actionContext.Request.Content.ReadAsAsync<SchoolyearEditRequest>().Result.Schoolyear.UserId; 
    var requstScope = actionContext.ControllerContext.Request.GetDependencyScope(); 
    var service = requstScope.GetService(typeof(ISchoolyearService)) as ISchoolyearService; 
    canUserExecuteAction = service.HasUserPermission(userId, targetId); 

    if (canUserExecuteAction) 
    { 
     base.OnAuthorization(actionContext); 
    } 
    else 
    { 
     actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden); 
    } 
} 
0

如果您在SchoolyearController作出_Service参数公开,你可以尝试这样的事情在OnAuthorization方法:

var schoolyearController = actionContext.ControllerContext.Controller as SchoolyearController; 
canUserExecuteAction = schoolyearController._service.HasUserPermission(userId, schoolyearId); 
相关问题