2010-03-13 36 views
2

在.NET MVC應用程序中封裝對功能的訪問有哪些不同的解決方案?在.NET MVC中包裝訪問功能的方法?

例如,我有六個選項卡,分別代表應用程序的不同區域,在區域1中,可以添加,編輯,上傳任何內容。

我需要一箇中心的方式說:

  1. 構建什麼樣的用戶可以做一些解釋
  2. 包裹標籤,按鈕,鏈接等,驗證用戶可以訪問此片的功能,並且表演/適當地隱藏。

我知道我可以通過操作過濾器和角色限制對操作的訪問,但是從UI中怎麼樣?

任何幫助,將不勝感激。我相信我不是唯一需要這樣做的人,謝謝!

回答

2

首先,您還需要執行服務器端授權。任何人都可以冒充你的客戶並直接調用你的控制器,繞過你的客戶端授權。

但在這裏就是我想要做的:

創建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),但我不確定這是否必要。

+0

你有一些示例代碼? – 2010-03-13 07:53:52

+0

不錯!感謝您的建議,我會嘗試一下。 – Kevin 2010-03-14 18:07:55