根据用户角色隐藏ActionLinks,而不在视图中公开角色

时间:2015-03-10 15:06:17

标签: asp.net-mvc controller authorization actionlink

我使用AuthorizeAttribute和角色(Identity)。我想根据用户角色隐藏ActionLinks。我找到了像this这样的HtmlHelpers解决方案。但我真的不喜欢这些解决方案,因为视图必须知道所需的角色。这意味着角色定义了两次:在控制器和视图中。

有谁知道更好的解决方案?我可以吗从视图或控制器中的AuthorizeAttribute获取角色(可能使用ViewBag传输到视图)。我想知道反思,但是在性能方面这很糟糕,因为每个请求都会执行控制器代码。

最好的解决方案是在视图中没有逻辑..

1 个答案:

答案 0 :(得分:1)

一种可能性是使用MvcSiteMapProvider作为菜单。它具有内置的security trimming功能,可根据AuthorizeAttribute自动隐藏链接。如果您不喜欢内置的HTML帮助程序,则可以自定义模板和/或构建自己的HTML帮助程序,以根据节点可访问性隐藏链接。

或者,如果您不想使用第三方库,则可以对AuthorizeAttributeAclModule进行反向工程以实现自己的实施。

完全披露

我是MvcSiteMapProvider的主要撰稿人。