【问题标题】:Show views based on authentication显示基于身份验证的视图
【发布时间】:2012-08-21 12:46:47
【问题描述】:

我已在我一直在处理的 MVC 应用程序上正确实现了身份验证,并希望就为不同用户角色显示不同主布局页面的可能性提出一些建议。

我的系统目前有(并且可能永远有)3 个用户角色:

1. Administrator
2. Superior
3. General

我想做的是根据他们的角色创建 3 个用户布局(在首先被指向登录页面之后)所以 _layout_admin.vbhtml 等

有谁知道如何做到这一点?我已经搜索过了,知道我可以限制控制器,但想首先将它们重定向到正确的用户布局。

【问题讨论】:

    标签: vb.net asp.net-mvc-3 razor


    【解决方案1】:

    在你的~/Views/ViewStart.cshtml:

    @Code
        Dim r = Roles.GetRolesForUser()
        If r.Contains("Administrator") Then
            Layout = "~/Views/Shared/_LayoutForAdmin.vbhtml"
        ElseIf r.Contains("Superior") Then
            Layout = "~/Views/Shared/_LayoutForSuperior.vbhtml"
        ElseIf r.Contains("General") Then
            Layout = "~/Views/Shared/_LayoutForGeneral.vbhtml"
        Else
            Layout = "~/Views/Shared/_Layout.vbhtml"
        End If
    End Code
    

    【讨论】:

    • 谢谢。如果他们最初没有登录,他们会看到登录页面吗?
    • 不,在这种情况下将使用~/Views/Shared/_Layout.cshtml。这只会根据用户角色切换布局。
    • 如果我在哪里用 ~/Views/Account/Login.vbhtml 替换最终代码,_layout,然后用户登录会运行 ~/Views/ViewStart.vbhtml(即每次更改视图时都会运行?)还是只运行第一次?
    • _ViewStart 在每个 Razor 视图上始终运行。因此,如果用户没有登录,将使用~/Views/Account/Login.vbhtml,一旦他登录,根据他所属的角色,将使用相应的布局。这是他要求的每一页。
    • 有道理。所以我会一直强迫他们去登录页面。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2021-01-25
    • 2015-08-03
    • 2016-02-08
    • 2015-08-12
    • 2020-10-08
    相关资源
    最近更新 更多