簡體   English   中英

ASP.Net MVC和成員資格

[英]ASP.Net MVC & Memberships

對於我要實現的目標,我將不勝感激:

問題:

  1. 我想授權我的應用程序用戶對控制器執行單一操作。 例如:如果用戶具有所需的授權,則可以對我的控制器類執行“保存”操作。
  2. 在我正在從事的項目中,角色的創建及其授權是由客戶端部署團隊完成的,而不是由我控制。 因此,我編寫了一個可以分配給角色/用戶的“控制點”,而我的應用程序只需要檢查該控制點。
  3. 如何將控制點概念引入ASP.Net MVC? 更具體地說,如何根據控制器上的用戶許可在視圖上啟用/禁用按鈕?

我的解決方案:

  1. 參考: http : //weblogs.asp.net/fredriknormen/archive/2008/03/12/asp-net-mvc-framework-2-interception-and-creating-a-role-action-filter.aspx-as起點
  2. 我將沒有ControlPointFilter類,而不是如上面的鏈接中所述創建角色過濾器,該類將獲取模型並進行授權檢查。
  3. 我遇到的麻煩是在View類中,而我目前正在傳遞用戶可以在ViewData []集合中訪問的控制點集合。
  4. 在View類中,我正在檢查ViewData集合中是否存在相關的控制點(我不喜歡-要將View類中的代碼保持在最低限度)
  5. 另一個問題是-在控制器類的屬性中設置了實際的控制點名稱時,如何/如何將這些屬性傳遞給視圖並保持視圖的清潔?

希望對您有所幫助,感謝您的時間/精力!

陽光明媚

一種可能的解決方案是將控制點轉換為控制器動作中的視圖屬性(盡管這些可能是相同的東西,但不清楚您的問題)。 這樣的想法是,您的控制點將轉換為有意義的視圖方向,例如“ AllowEdit”,“ AllowSave”,“ AllowDetailedView”等。這些將成為ViewData中的條目。

使用基本控制器類擴展Controller並為其提供ControlPoint集合。 讓您的過濾器在控制器中填充此集合。 讓基本控制器的OnActionExecuted方法使用此集合,如果使用ViewResult,則使用適當的值填充View指令的ViewData。 單個控制器動作也可以使用ControlPoint集合來確定是否需要根據單個視圖的數據提供數據,從而為單個視圖提供數據。

在您看來,不是依靠控制點本身,而是依靠基本控制器確定的視圖方向。 這樣,您已將視圖與控制點邏輯分離。 視圖僅以對視圖有意義的方式對視圖數據進行操作,而不對在應用程序上下文中有意義的基於權限的數據進行操作。 視圖不關心如何或為什么設置特定指令,它僅需要根據指令的值進行適當渲染。

嗯,您不能簡單地創建一個模板系統來為用戶分配角色嗎? 即創建具有角色“ CustomerService”和“ ConfigurationEditor”的用戶模板“超級用戶”,然后像往常一樣使用角色系統(即Roles.IsUserInRole(username,rolename))?

對於操作,您可以使用

[Authorized(Roles="CustomerService,CustomerServiceAdmin")]
public ActionResult Edit(...)
{
}

對於視圖,您使用

<% if (Roles.IsUserInRole(Context.User.Name, "CustomerService")) %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM