在MVC中,如何基于复杂的逻辑处理视图中内容的可选呈现?

时间:2016-01-16 19:17:14

标签: asp.net-mvc

我试图在我的视图中实现一些授权检查,这些检查的逻辑比简单地检查当前角色更复杂。基本上我只想将某些部分输出给获得授权的用户。基本上我想在我看来这样做:

<p>Everyone can read this</p>
@if(ComplexAuthorizationLogic())
{
    <p>Only authorized can read this</p>
}

我能想到的唯一选择是为我的模型添加属性,但是我必须在很多地方这样做,所以很多代码重复都感觉不对。

首先,我是否以正确的方式思考这个问题,还是应该完全区别对待?如果没有,你会推荐什么?

1 个答案:

答案 0 :(得分:0)

以下是我如何做到这一点: 创建一个helper / utility类,类似于下面的类。 命名空间Your.Root.Namespace {     公共部分类SecurityProvider     {         public static bool HasAnyRole(params string [] roles)         {             bool hasAnyRole = false;             if(IsUserAuthenticated())             {                 var user = HttpContext.Current.User;                 var services = DependencyResolver.Current.GetService&lt; IMembershipService&gt;();                 hasAnyRole = services.UserHasAnyRole(user.Identity.Name,roles);             }             return hasAnyRole;         }         public static bool IsUserAuthenticated()         {             bool isAuthenticated = false;             var user = HttpContext.Current.User;             if(user!= null&amp;&amp; user.Identity!= null)             {                 isAuthenticated = HttpContext.Current.User.Identity.IsAuthenticated;             }             return isAuthenticated;         }     } } 然后在视图中使用相关方法。 @if(SecurityProvider.HasAnyRole(&#34;联系&#34)) {     &LT; DIV&GT;         这是分类内容!您必须是管理员才能看到这个!     &LT; / DIV&GT; } 您可以在我制作的示例项目中找到整个班级。