0

这个问题似乎很简单……我相信成千上万的人已经弄清楚了,所以也许我想多了。如何根据用户的权限级别在导航栏中隐藏或显示链接?我正在使用自定义角色(不是 MVC)并将该信息存储在数据库中。我想要的效果很简单

_Layout.cshtml

...

@if(user.IsAdmin)
    show link
...

我在网上和 SO 上找到了几种解决方案,但大多数似乎都违反了 MVC 结构。

我发现的大多数解决方案都涉及从视图中探测数据,我很确定这是不好的做法。其他解决方案涉及利用视图中的会话变量来决定显示什么,不显示什么。这不是也违反了最佳实践,因为视图不应该能够决定内容吗?

我能想到的唯一“纯 MVC”方式是将 的值合并IsAdmin到我的每个视图模型中,这似乎比它的价值更麻烦。我想也可以创建一个 javacript 解决方案,在其中我使用 AJAX 来确定管理员状态,然后让它在我的导航栏中注入一个 html 元素。

处理这个问题的正确方法是什么?我只是误解了最佳实践吗?

4

1 回答 1

0

也许在布局中使用部分视图?像这样的东西:

@Html.Partial(actionName: "NavigationLinks", controllerName: "Navigation")

这样,您可以保留 MVC 约定:视图可以是独立的,并且导航控制器会注入模型(无论是来自会话数据还是其他任何地方)。

于 2013-09-30T22:31:48.437 回答