我使用AuthorizeAttribute和角色(Identity)。我想根据用户角色隐藏ActionLinks。我找到了像this这样的HtmlHelpers解决方案。但我真的不喜欢这些解决方案,因为视图必须知道所需的角色。这意味着角色定义了两次:在控制器和视图中。
有谁知道更好的解决方案?我可以吗从视图或控制器中的AuthorizeAttribute获取角色(可能使用ViewBag传输到视图)。我想知道反思,但是在性能方面这很糟糕,因为每个请求都会执行控制器代码。
最好的解决方案是在视图中没有逻辑..
答案 0 :(得分:1)
一种可能性是使用MvcSiteMapProvider作为菜单。它具有内置的security trimming功能,可根据AuthorizeAttribute自动隐藏链接。如果您不喜欢内置的HTML帮助程序,则可以自定义模板和/或构建自己的HTML帮助程序,以根据节点可访问性隐藏链接。
或者,如果您不想使用第三方库,则可以对AuthorizeAttributeAclModule进行反向工程以实现自己的实施。
完全披露
我是MvcSiteMapProvider的主要撰稿人。