2016-10-22 3 views
1

Я обновил старый проект ASP.Net Mvc, который использует Servicestack с 4.0.40 до 4.5, но я видел, что при вызове base.HasRole я должен передать IAuthRepository, мне было интересно если есть способ, чтобы получить его из ServiceStackController или в IAuthSessionИзвлечь IAuthRepository из ServiceStackController

Рассмотрим следующий фрагмент

protected override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) 
    { 
     ViewBag.UICulture = this.UICulture ?? "it-IT"; 
     ViewBag.MiniProfiler = AppSettings.Get<bool>(Resources.MiniProfilerKey, false); 

     if (UserSession.IsAuthenticated) 
     { 

      ViewBag.IsAdmin = this.UserSession?.HasRole(RoleNames.Admin) ?? false; 
      if (!String.IsNullOrEmpty(this.UserAuthName)) 
      { 
       ViewBag.UserName = this.UserAuthName; 
      } 

      var userSession = UserSession as IFMSAuthUserSession; 

      if (userSession != null) 
      { 
       userSession.UserImpersonated = GetImpersonatedUser(Module); 

       var menu = userSession.Menu?.Clone(); 

       if (menu == null) 
       { 
        int t = 0; 
       } 

       ViewData[Resources.ModulesData] = userSession.GetAuthorizedModules().Skip(1); //salta home 
       ViewData[Resources.MenuData] = menu; 
       ViewData[Resources.BreadCrumbData] = menu?.LightMenu(Regex.Replace(Request.Url.AbsolutePath, "/$", "")); 
      } 
     } 
    } 

, который определен в абстрактном классе

public abstract class BaseController<T> : ModuleController<T> 
    where T : class, ServiceStack.Auth.IAuthSession 

где ModuleController является

public abstract class ModuleController : ModuleController<MyAuthUserSession> 
{ } 

ответ

2

Вы можете получить его от ServiceStackController, например:

var ssController = filterContext.Controller as ServiceStackController; 
var authRepo = ssController?.AuthRepository; 

В противном случае за пределами ServiceStack вы можете получить его прямо из AppHost.GetAuthRepository() одноточечного но вам нужен доступ к IRequest (например доступный от ServiceStackRequest в ServiceStackController):

var authProvider = HostContext.AppHost.GetAuthRepository(req);