我正在使用mvc在visual studio中创建一个网站。我创建了一个用于存储用户的数据库,其中一个属性是名为IsAdmin的bool。
我正在尝试在网站布局的导航栏中添加几个链接,因此只有管理员字段中的人才可以看到它们。如何从_Layout.cshtml访问用户属性,以查看用户的IsAdmin字段的值是否为true?
@if (Request.IsAuthenticated)
{
<li>@Html.ActionLink("Logout", "Logout", "Account", new { area = "" }, null)</li>
<li>@Html.Action("UserNavPartial", "Account", new { area = "" })</li>
<li>@Html.ActionLink("View Schedule", "ManageSession", "Session", new { area = "" }, null)</li>
<li>@Html.ActionLink("Sign Up", "Index", "Session", new { area = "" }, null)</li>
@if (@*checking if admin right here*@)
{
}
}
答案 0 :(得分:0)
执行此操作的常用方法是使用强类型_Layout /母版页,其中BaseViewModel
具有所有页面共有的属性(如导航项)。
以下是一个示例:Pattern for passing common data to _layout.cshtml in MVC4.5
答案 1 :(得分:0)
这应该是您要查找的行(当然,您可以更改所需角色的管理员)。
@User.IsInRole("Administrator")
如果您想知道如何将表连接到MVC中的角色,这应该会给您一个良好的开端。
<强> LoginController.cs 强>
假设您有一个Login控制器,其中包含您使用身份验证用户的操作。只要您为用户用户验证以下行:
FormsAuthentication.SetAuthCookie(client.Usernam, false);
<强> Global.asax中强>
在对用户进行身份验证后,您需要在Global.asax文件中使用以下方法。
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
try
{
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
string roles = string.Empty;
using (Entities db = new Entities())
{
Client client = db.Client.SingleOrDefault(x => x.Username== username);
if (client.isAdmin)
{
roles = "Administrator;User";
}
else
{
roles = "User";
}
}
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(
new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
}
catch (Exception)
{
}
}
}
}
答案 2 :(得分:0)
一种方法是
在模特:
namespace mvc.Models
{
public static class StaticClass
{
public static bool IsAdmin
{
get { return (bool)HttpContext.Current.Session["IsAdmin "]; }
set { HttpContext.Current.Session.Add("IsAdmin ", value); }
}
}
}
在视图中
@if(mvc.Models.StaticClass.IsAdmin)
{
<label>True</label>
}
按管理员登录后,设置会话:
Models.StaticClass.IsAdmin = true or false based on logged in user to get it in view;