如何从cshtml文件中检查当前登录用户的属性?

时间:2016-03-15 21:31:01

标签: c# asp.net-mvc asp.net-mvc-4 razor

我正在使用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*@)
   {

   }
}

3 个答案:

答案 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;