【问题标题】:How to show/hide shared _Layout.cshtml element according of user roles如何根据用户角色显示/隐藏共享的 _Layout.cshtml 元素
【发布时间】:2021-08-31 13:42:20
【问题描述】:

我已经像这样分享了 _Layout.cshtml:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("Студентска служба", "Index", "Students", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li>@Html.ActionLink("Студентски програми", "Index", "Studies")</li>
                    <li>@Html.ActionLink("Референти", "Index", "Referents")</li>
                    <li>@Html.ActionLink("Пријава испита", "Index", "Exams")</li>
                </ul>
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderBody()
        <hr />
    </div>
</body>
</html>

在数据库中,我有 3 种类型的用户(管理员、参考对象和学生)。

这是我的用户控制器:

public class UsersController : Controller
{
    private StudentServiceContext db = new StudentServiceContext();

    // GET: Users
    public ActionResult Index()
    {
        return View(db.Users.ToList());
    }
    
    public ActionResult Login()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Login(Users user)
    {
        using (StudentServiceContext db = new StudentServiceContext())
        {
            var usr = db.Users.Where(u => u.UserName == user.UserName && u.Password == user.Password).FirstOrDefault();
            if (usr != null)
            {
                Session["UserID"] = usr.UserID.ToString();
                Session["Username"] = usr.UserName.ToString();
                Session["Password"] = usr.UserName.GetHashCode();
                return RedirectToAction("Index", "Referents");
            }
            else
            {
                ModelState.AddModelError("", " Нетачно корисничко име или лозинка!");
            }
        }
        return View();
    }

    public ActionResult LoggedIn()
    {
        if (Session["UserID"] != null)
        {
            return View();
        }
        else
        {
            return RedirectToAction("Login");
        }
    }

所以,例如,如果登录用户不是学生,我想隐藏

<li>@Html.ActionLink("Пријава испита", "Index", "Exams")</li>

我尝试使用@model dynamic 和@model StudentService.Models.Users,所以我认为我可以使用 if 条件,例如 @if(Model.UserRole.Equals("student")) 等,但没有任何东西可以正常工作...

【问题讨论】:

    标签: asp.net .net asp.net-mvc model-view-controller razor


    【解决方案1】:

    你很接近。试试这个:

    @if(User.IsInRole("student")) {
      <li>@Html.ActionLink("Пријава испита", "Index", "Exams")</li>
    }
    

    另请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.security.principal.iprincipal?view=netframework-4.8

    【讨论】:

    • 我已经尝试过这种方式,但是无论登录用户的角色是什么,它都被隐藏了。
    • 那么您是否已验证用户具有角色 student 并且“student”是您角色的实际名称?
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 2021-08-05
    • 2014-12-31
    • 2021-12-01
    • 2012-12-14
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多