2015-01-08 76 views
0

我有一個MVC 5.2應用程序,它利用了ASP.Identity和增強的角色服務。所有用戶都被分配了一個前綴如下的角色:用於內部用戶的公司(例如「CorporateAdmin」)和用於外部用戶的客戶端(例如「ClientAdmin」)。通過Role.GetRolesforUser在應用程序中限制內容

我有我只想在視圖中顯示的內容,只有經過身份驗證的外部客戶端。我已經嘗試了多種以下格式:

@if (Request.IsAuthenticated && !Roles.GetRolesForUser().Contains("Corporate")) 
    { 
     *Content to be displayed* 
    } 

返回的錯誤信息是「CS0201:只有分配,調用,遞增,遞減,在等待着,新對象表達式可以用作聲明

我也曾嘗試:

@if (Request.IsAuthenticated && Roles.GetRolesForUser().Contains("Corporate") == false) 
    { 
     *Content to be displayed* 
    } 

@if (Request.IsAuthenticated && User.IsInRole("CorporateAdmin") == false) 
    { 
     *Content to be displayed* 
    } 

所有receivin g同樣的錯誤。

任何方向將不勝感激。

+0

邏輯是有缺陷的; GetRoles返回一個角色列表。你應該檢查每個角色,而不是檢查「公司」是其中一個角色 –

+0

對。但是不應該列出,如果其中包含「企業」一詞觸發布爾假? –

+0

是的。這就是爲什麼我沒有發佈這個答案。我懷疑大括號之間的代碼。你可以發佈或只是測試沒有if。 –

回答

0

我認爲,這個錯誤意味着GetRolesForUser返回一個字符串數組,而不是一串字符串。一個數組沒有Contains方法。

嘗試:

@if (Context.User.IsInRole("Corporate")) 
{ 
    "Content to be displayed" 
} 
+0

「公司」不是一個角色。它是角色的前綴。那麼我必須檢查所有以「Corporate」爲前綴的角色嗎?這似乎不必要地繁重。 –

+0

嘗試使用LINQ:'Roles.GetRolesForUser()。存在(role => role.StartsWith(「Corporate」))'。您需要在您的Razor視圖中使用@using System.Linq。 'StartsWith'檢查前綴。您可以調用檢查前綴,後綴和中綴的「Contains」。 –

相關問題