在.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