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

Hide ActionLinks based on user roles without exposing roles in view

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

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

无论如何,最好的解决方案是视图中没有逻辑..

一种可能性是使用 MvcSiteMapProvider for your menu. It has a built-in security trimming 根据 AuthorizeAttribute 自动隐藏链接的功能。如果您不喜欢内置的 HTML 帮助器,您可以自定义模板 and/or 构建您自己的 HTML 帮助器,这些帮助器根据节点可访问性隐藏链接。

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

完全公开

我是 MvcSiteMapProvider 的主要贡献者。