2016-07-16 51 views
0

我正在.NET 4.6,MVC 5上構建一個新站點。我想爲用戶使用相同的路由,無論他們是否已登錄,但我希望他們在註銷時看到主頁並在登錄時查看他們的個人內容。Facebook就是這樣一個例子 - 無論您是否登錄,Facebook的URL都是facebook.com使用相同的路由,但爲已驗證/未驗證的用戶顯示不同的內容

我很喜歡使用任何必需的方法,但我不確定如何最好地完成此操作。

+0

如果用戶通過身份驗證,返回視圖(「A」,feedModel)'else'返回View()' – Shyju

+0

@Shyju沒有比將所有視圖和邏輯混合在一起更好的方法嗎? – vaindil

回答

2

根據用戶是否通過身份驗證提供模型數據。你可以很容易地檢查這個

this.User.Identity.IsAuthenticated 

根據這個你有條件地建立視圖內容,甚至渲染一些局部視圖,例如,

// controller 
model.ShowSomething = this.User.Identity.IsAuthenticated; 

然後

@* view *@ 

@if (Model.ShowSometing) { 
    Html.Partial(something that only authenticated users will see) 
} 

記住你的行動應該是匿名用戶(沒有Authorize屬性)訪問。

2

對於內容要在每一頁上,比如只顯示某些導航欄鏈接到這些登錄,您可以將認證檢查直接在您的佈局來看,類似如下:

@if (Request.IsAuthenticated) 
{ 
    //only logged in users see this -- perhaps nav bar links or other site-wide content 
} 

您也可以創建一個角色或權限提供者,以便您可以更好地控制基於角色等在頁面上顯示的部分。然後執行與上述相同的操作,並根據用戶角色檢查用戶是否被允許,等等。這對於僅顯示基於他們所處角色的添加或編輯按鈕來說很好。類似於:

@if (Request.IsAuthenticated && User.IsInRole("Admin")) 
{ 
    //only logged in users see this who are in the admin role 
} 

當然,如果您在視圖中做了太多這樣的操作,那麼您可能會感到混亂,因此如上所述的Wiktor Zychla,您也可以在模型中添加這些屬性,然後僅在視圖中引用模型。

但是對於網站範圍內的內容(例如,在佈局文件中有條件地顯示導航欄鏈接),引用視圖中的請求或用戶將執行此操作。

相關問題