2015-09-11 41 views
1

我想對用戶的權限進行第二次檢查。 我的控制器裝飾有[RequiredPermission("ExamplePermission")],順便說一下對應於控制器名稱。在ServiceStack的AuthUserSession中訪問RouteData

而不是隻檢查ExamplePermission字符串是否包含在Session.Permissions列表中,我想添加一個檢查RouteData參數。

我可以通過方法HasPermission訪問這樣的對象嗎?

public override bool HasPermission(string permission) 
    { 
     //checking routedata's parameters 
     return base.HasPermission(permission); 
    } 

回答

0

經過一番與控制檯輸出I實際上設法通過這種方式來達到的RouteData值挖:

public override bool HasPermission(string permission) 
    { 
      bool hasPermission = base.HasPermission(permission); 
      var routeValues = ((System.Web.HttpRequestWrapper)(((ServiceStack.Host.AspNet.AspNetRequest)(HostContext.GetCurrentRequest())).HttpRequest)).RequestContext.RouteData.Values; 
      var idObj = routeValues["Id"]; 

      if (idObj != null) 
      { 
       int id; 
       if(int.TryParse((string)idObj, out id)) 
       { 
        [...] 
       } 
      } 
      return hasPermission; 
    } 
2

你不會成爲能夠從AuthUserSession內訪問當前的路線,但你可以在全局請求篩選,而不是它可讓您使用本服務和請求類型,元數據對您的服務和用戶會話添加一個檢查如:

GlobalRequestFilters.Add((req, res, dto) => 
{ 
    var requestType = dto.GetType(); 
    var serviceType = HostContext.Metadata.GetServiceTypeByRequest(requestType); 
    var operation = HostContext.Metadata.GetOperation(requestType); 

    //operation.RequiredPermissions 
    //operation.RequiresAnyPermission 
    //... 

    var userSession = req.GetSession(); 
    //userSession.HasPermission(...) 
    //... 
}); 
相關問題