C# ASP MVC使类命名空间在所有视图中都可用

C# ASP MVC使类命名空间在所有视图中都可用,c#,asp.net-mvc,razor,iprincipal,C#,Asp.net Mvc,Razor,Iprincipal,我有以下权限类。我如何才能在所有视图中使用此选项,而不必在每个视图中使用以下using语句@using MyApp.Extensions using System.Security.Principal; namespace MyApp.Entensions { public class Permissions { private readonly IPrincipal user; public Permissions(IPrincipa

我有以下权限类。我如何才能在所有视图中使用此选项,而不必在每个视图中使用以下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

     }
 }
我已经尝试将其添加到views web.config中,如下所示,但在尝试调用类似
@if(User.candeletietems)


如果要向IPrinciple添加扩展,则需要一个扩展类,如下所示

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

     }
 }
并不是说该类是public+static,扩展方法是public+static,并且在第一个参数之前还有“this”。您需要更改视图以将CanEditItems()用作方法而不是属性

if (System.Web.HttpContext.Current.User.CanEditItems()) { ... }

你不是说@model.user.candeletietems之类的吗?否则,您的cshtml文件中的用户是什么?@Peter,您误解了。我不是要送模特。这个类扩展了IPrinciple,所以User是currentl登录的用户。那么您正在进行检查,并根据该条件的布尔结果呈现视图的内容?如果是这样的话,您是否可以更好地在布局文件级别包装您的内容?您提供的代码不会扩展
I原则
。如果我的答案解决了您的问题,请不要忘记将其标记为已接受谢谢@Kapol,我确实:)
if (System.Web.HttpContext.Current.User.CanEditItems()) { ... }