设置会员框架的导航

发布于 2024-10-18 02:31:10 字数 238 浏览 2 评论 0原文

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

I'm developing ASP.NET 4.0 Website using SQL server 2008 with Membership Framework. It runs fine so far with static navigation in my master page which uses static Web.SiteMap file to generate the Navigational Menu. I am wondering If there is any way to generate this file dynamically depending on the user's role or Identity.
I would also like to know If there is any way to store this setting in database using membership framework so that I dont have to present each and every links to all users or roles who is not authorized to see some of pages in website or any other way to generate menu at runtime.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灯下孤影 2024-10-25 02:31:10

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

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

Web.config:

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

Web.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();
            }
        }
    }
}

Take a look on securityTrimmingEnabled="true", here's some links:

In general, using this option you're enabling the check does current user's role is allowed to visit current site map node.

Web.config:

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

Web.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>

Custom site map provider:

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();
            }
        }
    }
}
花伊自在美 2024-10-25 02:31:10

为了安全起见,需要进行安全调整,但如果您需要的不仅仅是安全性,请考虑创建自己的自定义站点地图提供程序。更多信息请参见:

HTH。

Security trimming is needed for security, but if you need to go beyond just security, consider creating your own custom sitemap provider. More info here:

HTH.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文