在.NET MVC應用程序中封裝對功能的訪問有哪些不同的解決方案?在.NET MVC中包裝訪問功能的方法?
例如,我有六個選項卡,分別代表應用程序的不同區域,在區域1中,可以添加,編輯,上傳任何內容。
我需要一箇中心的方式說:
- 構建什麼樣的用戶可以做一些解釋
- 包裹標籤,按鈕,鏈接等,驗證用戶可以訪問此片的功能,並且表演/適當地隱藏。
我知道我可以通過操作過濾器和角色限制對操作的訪問,但是從UI中怎麼樣?
任何幫助,將不勝感激。我相信我不是唯一需要這樣做的人,謝謝!
在.NET MVC應用程序中封裝對功能的訪問有哪些不同的解決方案?在.NET MVC中包裝訪問功能的方法?
例如,我有六個選項卡,分別代表應用程序的不同區域,在區域1中,可以添加,編輯,上傳任何內容。
我需要一箇中心的方式說:
我知道我可以通過操作過濾器和角色限制對操作的訪問,但是從UI中怎麼樣?
任何幫助,將不勝感激。我相信我不是唯一需要這樣做的人,謝謝!
首先,您還需要執行服務器端授權。任何人都可以冒充你的客戶並直接調用你的控制器,繞過你的客戶端授權。
但在這裏就是我想要做的:
創建AuthorizationService集中存儲這種業務邏輯。這將有類似的方法:
public bool CanEditSomeObject(Guid userId, Guid objectId)
使用此AuthorizationService您的控制器(或控制器引用的另一個服務)的內部構造的視圖模型與查看所需的所有授權信息。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(Guid id)
{
bool currentUser = _userService.GetUser(User.Identity.Name);
bool canEditSomeObject = _authenticationService.CanEditSomeObject(currentUser.Id, id);
var viewModel = new SomeObjectViewModel {CanEditSomeObject = canEditSomeObject};
return View(viewModel);
}
使您的視圖強制類型化並根據模型修改HTML。你可以使用像局部視圖這樣的東西來使這個更清潔。但是,您只需隱藏,禁用或不包含當前用戶無法訪問的內容的HTML。
<%= if (Model.UserCanEdit) Html.RenderPartial("EditForm.ascx") %>
另外,如果你需要動態改變客戶端的東西(例如,用戶執行動作,所以現在他們可以執行動作b)你可以使用jQuery來操縱HTML。你甚至可以使用JQuery調用你的控制器來詢問它是否有問題(見question),但我不確定這是否必要。
你有一些示例代碼? – 2010-03-13 07:53:52
不錯!感謝您的建議,我會嘗試一下。 – Kevin 2010-03-14 18:07:55