ASP MVC 使 Class 命名空间在所有视图中可用
ASP MVC Make Class Namespace Available In All Views
我有以下权限 class。我怎样才能使它在所有视图中可用,而不必在每个视图中使用以下 using 语句 @using MyApp.Extensions
using System.Security.Principal;
namespace MyApp.Entensions
{
public class Permissions
{
private readonly IPrincipal user;
public Permissions(IPrincipal user)
{
this.user = user;
}
public bool CanEditItems
{
get { return user.IsInAnyRole("Manager", "Admin"); }
}
public bool CanDeleteItems
{
get { return user.IsInAnyRole("Admin"); }
}
// Other permissions
}
}
我试过如下将它添加到视图 web.config 中,但是当我尝试调用 @if (User.CanDeleteItems)
之类的东西时,我没有得到任何智能感知
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyApp.Extensions" />
</namespaces>
</pages>
如果您想向 IPrinciple 添加扩展,那么您需要一个扩展 class,就像这样
using System.Security.Principal;
namespace MyApp.Entensions
{
public static class Permissions
{
public static bool CanEditItems(this IPrinciple user)
{
return user.IsInAnyRole("Manager", "Admin");
}
public static bool CanDeleteItems(this IPrinciple user)
{
return user.IsInAnyRole("Admin");
}
// Other permissions
}
}
并不是说 class 是 public + static,扩展方法是 public + static 并且在第一个参数之前还有 "this"。您需要更改视图以使用 CanEditItems() 作为方法而不是 属性.
if (System.Web.HttpContext.Current.User.CanEditItems()) { ... }
我有以下权限 class。我怎样才能使它在所有视图中可用,而不必在每个视图中使用以下 using 语句 @using MyApp.Extensions
using System.Security.Principal;
namespace MyApp.Entensions
{
public class Permissions
{
private readonly IPrincipal user;
public Permissions(IPrincipal user)
{
this.user = user;
}
public bool CanEditItems
{
get { return user.IsInAnyRole("Manager", "Admin"); }
}
public bool CanDeleteItems
{
get { return user.IsInAnyRole("Admin"); }
}
// Other permissions
}
}
我试过如下将它添加到视图 web.config 中,但是当我尝试调用 @if (User.CanDeleteItems)
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyApp.Extensions" />
</namespaces>
</pages>
如果您想向 IPrinciple 添加扩展,那么您需要一个扩展 class,就像这样
using System.Security.Principal;
namespace MyApp.Entensions
{
public static class Permissions
{
public static bool CanEditItems(this IPrinciple user)
{
return user.IsInAnyRole("Manager", "Admin");
}
public static bool CanDeleteItems(this IPrinciple user)
{
return user.IsInAnyRole("Admin");
}
// Other permissions
}
}
并不是说 class 是 public + static,扩展方法是 public + static 并且在第一个参数之前还有 "this"。您需要更改视图以使用 CanEditItems() 作为方法而不是 属性.
if (System.Web.HttpContext.Current.User.CanEditItems()) { ... }