我有一个分区树,它根据当前登录用户的UserType而变化。
问题是,如果我从后台注销,并使用UserType较低的新用户登录,则不会刷新树——不会重新运行代码来生成树。
这意味着,具有非管理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;
}
根据注释,当用户注销时,您没有清除_curNewUser
,这就是您看到此问题的原因。
与其保留对_curNewUser
的引用,不如直接在UserProvider中使用UmbracoContext.Current.Security.CurrentUser
中内置的umbraco,这样可以修复它,比如:
public static bool IsAdministrator()
{
var user = UmbracoContext.Current.Security.CurrentUser;
return user != null && user.UserType.Alias == "admin";
}
您无需连接注销事件或类似的事件。