2015-04-08 73 views
1

我有一个sectiontree根据当前登录的用户UserType而变化。刷新部分树新用户登录

问题是,如果我从后台登出,并且登录时用户类型较低的新用户,树不会刷新 - 代码不会重新运行以生成树。

这意味着具有非管理用户类型的用户可以访问该部分中的管理区域,只要管理员早先在相同的解决方案中登录即可。

我将如何使用户用户的SectionTree刷新登录?

更新

protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings) 
{ 

    var sectionApi = new SectionApiController(); 


    // Root handler 
    if (id == Constants.System.Root.ToInvariantString()) 
    { 
     this.RootHandler(); 
    } 
    else if(id.Contains("COUNTRY_") || id.Contains("LEVEL_")) 
    { 
      var section = new IdConvert(id); 

     if (section.Area.Equals("country")) 
     { 
      this.FirstLevelHandler(section.Id); 
     } 
     else if (section.Area.Equals("level")) 
     { 
      this.GetLevels(section.Id); 
     } 

     // Render clubs. 
     this.ClubHandler(); 
     // Render levels 
     this.LevelHandler(); 

    } else if(id.Contains("CLUB_")) { 

    } 
    else if(id.Contains("SPORTS_")) { 
     var Country = new IdConvert(id); 
     this.SportsHandler(Country.Id); 
    } 
    else if (id.Contains("QUESTIONS_")) 
    { 
     var Country = new IdConvert(id); 
     this.QuestionsHandler(Country.Id); 

    } 


    return this._nodes; 
} 

树做工精细,它使得它应该呈现什么。但它会在新用户登录时刷新刷新。

我用下面来请检查是否或不是一个人,是基于注释“管理员”

public static bool IsAdministrator() 
{ 
    try 
    { 
     if (_curNewUser == null) 
     { 
      GetCurrentUser(); 
     } 

     if (_curNewUser.UserType.Alias == "admin") 
     { 
      return true; 
     } 
    } 
    catch (Exception e) { } 

    return false; 

} 
+0

你能告诉我们一些源代码吗?最好生成/填充sectiontTree的代码? – Pseudonym

+0

代码added.Thanks –

+1

你是否在用户注销时将_curNewUser设置为null? –

回答

1

当用户注销,这就是为什么你看到了这个问题,你是不是清除_curNewUser

而不是保持参照_curNewUser你应该用一把umbraco内置UmbracoContext.Current.Security.CurrentUser直接在UserProvider并且将修复它,像这样的:

public static bool IsAdministrator() 
{ 
    var user = UmbracoContext.Current.Security.CurrentUser; 
    return user != null && user.UserType.Alias == "admin"; 
} 

无需您挂钩到注销事件或类似的东西。