Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在MVC中授权视图的部分_Asp.net_Asp.net Mvc_Authorization_Forms Authentication - Fatal编程技术网

Asp.net 在MVC中授权视图的部分

Asp.net 在MVC中授权视图的部分,asp.net,asp.net-mvc,authorization,forms-authentication,Asp.net,Asp.net Mvc,Authorization,Forms Authentication,我想知道是否可以授权视图中的部分视图 例如,我了解如何使用此方法授权整个控制器 <HandleError()> _ Public Class HomeController Inherits System.Web.Mvc.Controller Function Index() Return View() End Function <Authorize(Roles:="Administrators")> _ Function Administr

我想知道是否可以授权视图中的部分视图

例如,我了解如何使用此方法授权整个控制器

<HandleError()> _
Public Class HomeController
  Inherits System.Web.Mvc.Controller

  Function Index()
    Return View()
  End Function

  <Authorize(Roles:="Administrators")> _
  Function AdministratorSecrets()
    Return View()
  End Function

End Class
_
公共类家庭控制器
继承System.Web.Mvc.Controller
函数索引()
返回视图()
端函数
_
函数管理员secrets()
返回视图()
端函数
末级
但是我想做的是,如果管理员登录,他们可以在我的导航中看到其他链接

类似于

            <ul id="menu">              
                <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
                <li><%= Html.ActionLink("About", "About", "Home")%></li>
                <Authorize(Roles:="Administrators")> _
                <li><%= Html.ActionLink("Admin", "Admin", "Home")%></li>
            </ul>
  • _
很明显,这是行不通的,但它让我了解了我想要实现的目标


有什么想法吗?

使用以下方法:

<% if(Roles.IsUserInRole("Administrator")){ %>
<span>HTML Code</span>
<% } %>

HTML代码

将if内容发送到新的html helper扩展方法是最佳做法。

您可能需要考虑使用这种方法的长期可维护性。我希望视图的模型有一个标志CanSeeAdminSecrets,并使用Roles.IsUserInRole方法从控制器设置该标志。管理员的定义可能会在以后的某个时候在系统中发生变化,在控制器中设置管理员的逻辑更有意义。我觉得这只是偏好真的如果你要经历的话,最好将此类代码放在Roles类的扩展方法中——将其添加到模型中只会将定义从多个视图移动到大约相同数量的控制器操作——如果在扩展方法中,则定义将位于一个位置。下面是我编写的一个相当完整的示例。您必须根据该概念编写自己的数据库表,但它应该可以工作。请添加一些引用以说明获取此信息的位置。