在新用户登录时刷新sectionTree



我有一个分区树,它根据当前登录用户的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";
}

您无需连接注销事件或类似的事件。

相关内容

  • 没有找到相关文章

最新更新