2011-12-11 37 views
2

我想爲創建或更新信息(但不顯示)等操作創建權限。 爲此,我在所有必要的方法之前添加屬性,例如檢查控制器和視圖中的權限

[Permissions(Permissions.Admin)] 
public ActionResult Create() 
{ 
    //... 
} 

而且我也不想離開的索引頁面的鏈接。所以我必須在視圖內添加一些檢查。

@if (checking...) 
{ 
    @Html.ActionLink("Create New", "Create") 

} 

的多個檢查添加,比較枯燥,而更多的事情我必須保持我的腦海裏。 如何做到這一點?

回答

3

你可以爲此創建的HtmlHelper,

喜歡的東西@Html.ActionLinkUsingPermissions("Create New", "Create",Permissions.Admin)

的的HtmlHelper將決定是否要顯示根據當前用戶的權限的鏈接。

+0

是的,這比在視圖內檢查要好。 – Shymep

2

您可以創建視圖的只讀版本並讓控制器決定應該返回哪個版本(根據您的許可)。

然後可以在部分視圖中對共享UI進行外部化。

建議儘可能使業務邏輯儘可能不含業務邏輯。

+0

我明白這一點。我希望權限由角色決定。我假設角色是不同的,並且可能由不同的權限組合組成。我想優化我的代碼並儘量保持結構。除了增加視圖的數量之外,沒有辦法去做嗎? – Shymep

1

您還可以創建兩個不同的視圖模型。一個用於讀/寫,另一個用於只讀。然後,使用View Templates功能,你可以有一個視圖會自動選擇合適的模板,使用該行表示:

@Html.DisplayForModel() 
+0

如果我需要兩個以上的視圖模型會怎麼樣?例如,如果角色將由不同的權限組合組成。創建儘可能多的視圖模型就像我需要這種操作一樣好嗎? – Shymep

+0

在這種情況下,我會走另一條路線。這將留給許多模型,可能不值得。 –