2

在 .NET MVC 应用程序中封装对功能的访问有哪些不同的解决方案?

例如,我有六个选项卡,代表应用程序的不同区域,在区域 1 内,可以添加、编辑、上传等等。

我需要一个中心的方式说:

  1. 建立一些用户可以做什么的字典
  2. 包装选项卡、按钮、链接等,验证用户可以访问该功能并适当地显示/隐藏。

我知道我可以通过操作过滤器和角色限制对操作的访问,但是从 UI 中呢?

任何帮助,将不胜感激。我相信我不是唯一需要这样做的人,谢谢!

4

1 回答 1

2

首先,您还需要执行服务器端授权。任何人都可以冒充您的客户并直接呼叫您的控制器,从而绕过您的客户端授权。

但这是我要做的:

创建一个 AuthorizationService 来集中存储这个业务逻辑。它将具有以下方法:

public bool CanEditSomeObject(Guid userId, Guid objectId)

在您的控制器(或控制器引用的其他服务)中使用此 AuthorizationService 来构造 ViewModel 以及视图所需的所有授权信息。

    [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") %>

此外,如果您需要在客户端动态更改内容(例如,用户执行操作 a,因此现在他们可以执行操作 b),您可以使用 JQuery 来操作 HTML。如果需要,您甚至可以使用 JQuery 调用您的控制器向其提问(请参阅此问题),但我不确定这是否有必要。

于 2010-03-13T06:49:44.807 回答