在.NET MVC应用程序中包装对功能的访问有哪些不同的解决方案?
例如,我有六个选项卡代表应用程序的不同区域,在区域1内,可以添加,编辑,上传等任何内容。
我需要一个中心的方式来说:
我知道我可以通过操作过滤器和角色来限制对操作的访问,但是从UI开始呢?
任何帮助将不胜感激。我相信我不是唯一一个需要这样做的人,谢谢!
答案 0 :(得分: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调用你的控制器来询问它是否有问题(见question),但我不确定是否有必要。