gpt4 book ai didi

c# - 如何在页面加载时设置 MVCSitemapnode 角色属性?

转载 作者:行者123 更新时间:2023-11-30 21:57:02 25 4
gpt4 key购买 nike

所以我有一个 mvcsitemap:

<mvcSiteMapNode id="Home" title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Page2" controller="Page2" action="Index"/>
<mvcSiteMapNode title="Page3" controller="Page3" action="Index" />
<mvcSiteMapNode title="Page4" controller="Pag4" action="Index" />
</mvcSiteMapNode>

我想做的是在加载站点时,我想根据数据库中的值分别设置每个节点的“角色”属性。示例:

我希望可以从以下角色访问 Home 节点:Admin、User我希望可以从以下角色访问 Page2 节点:用户

最佳答案

根据 documentation ,roles 属性用于与 ASP.NET 的迭代操作。它不应该用于 MVC 安全,主要是因为 MVC 不保护物理页面,而是 MVC 保护资源(通常是 Controller 操作)。 ASP.NET 安全方案基于底层文件系统,因此完全不适用于 MVC。

MVC 安全性基于 AuthorizeAttribute .您可以子类化 AuthorizeAttribute 以提供您需要的任何安全方案,包括在每次往返时从数据库中读取设置(如果这是您真正想要的)。参见 this article对于一种这样的方法。

但请注意,默认的 AuthorizeAttribute 实现支持 Controller 操作上的角色和用户,这将是一个性能更好的解决方案。

[Authorize(Roles="Administrators,SuperUsers")]
public ActionResult ChangePassword(ChangePasswordModel model)
{
...
}

一旦您将安全性建立在 AuthorizeAttribute(或 AuthorizeAttribute 的子类)之上,MvcSiteMapProvider 将自动与其交互。您唯一需要做的就是 turn on security trimming .

内部 DI (web.config)

<appSettings>
<add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/>
</appSettings>

外部 DI(MvcSiteMapProvider 模块)

bool securityTrimmingEnabled = true; // Near the top of the module

关于c# - 如何在页面加载时设置 MVCSitemapnode 角色属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com