2016-08-01 66 views
1

我有以下Permission類。我怎樣才能讓所有的觀點這可無需使用以下using語句在每個視圖@using MyApp.ExtensionsASP MVC Make類命名空間在所有視圖中可用

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> 
+0

難道你不是指@ model.user.CanDeleteItems或類似的東西嗎?否則,你的cshtml文件中的User是什麼? –

+0

@彼得你誤會了。我沒有傳入模型。該類擴展了IPrinciple,以便用戶是當前登錄的用戶。 – adam78

+0

因此,您正在根據該條件的布爾結果進行檢查並呈現視圖的內容?如果是這樣,你不是更好地包裝在佈局文件級別的內容? – LDJ

回答

1

如果你想添加擴展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()) { ... } 
+1

您忘記將方法標記爲「static」。 – Kapol

+0

謝謝@卡波爾,我確實:) –

相關問題