【问题标题】:Setting Navigation for Membership Framework为成员框架设置导航
【发布时间】:2011-06-30 22:09:04
【问题描述】:

我正在使用带有 Membership Framework 的 SQL Server 2008 开发 ASP.NET 4.0 网站。到目前为止,它在我的母版页中使用静态导航运行良好,它使用静态 Web.SiteMap 文件生成导航菜单。我想知道是否有任何方法可以根据用户的角色或身份动态生成此文件。 我还想知道是否有任何方法可以使用会员框架将此设置存储在数据库中,这样我就不必向所有无权查看网站或任何其他页面的用户或角色提供每个链接在运行时生成菜单的方法。

【问题讨论】:

    标签: asp.net sql-server asp.net-membership sitemap


    【解决方案1】:

    看看securityTrimmingEnabled="true",这里有一些链接:

    一般来说,使用此选项您启用检查当前用户的角色是否允许访问当前站点地图节点。

    Web.config:

    <siteMap defaultProvider="MySiteMapProvider" enabled="true">
        <providers>
            <clear />
            <add name="MySiteMapProvider" type="My.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
        </providers>
    </siteMap>
    

    网站地图:

    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
        <siteMapNode url="Default.aspx" title="Main" roles="*">
            <siteMapNode url="Admin.aspx" title="Admin" roles="admin" />
        </siteMapNode>
    </siteMap>
    

    自定义站点地图提供者:

    namespace My
    {
        public class XmlSiteMapProvider : System.Web.XmlSiteMapProvider
        {
            public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
            {
                if (node.Roles.OfType<string>().Any(r => String.Equals(r, "*", StringComparison.Ordinal) || context.User.IsInRole(r)))
                {
                    return true;
                }
                else
                {
                    throw new My.InsufficientRightsException();
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      安全性需要进行安全性修整,但如果您需要超越安全性,请考虑创建您自己的自定义站点地图提供程序。更多信息在这里:

      HTH。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 2020-08-06
        相关资源
        最近更新 更多