【发布时间】:2010-06-02 13:54:48
【问题描述】:
我们目前正在重写我们组织的 ASP.NET MVC 应用程序,该应用程序已经编写了两次。 (一次 MVC1,一次 MVC2)。 (谢天谢地,当时还没有准备好生产并且太成熟了)。
这一次,无论如何,这将是真正的交易,因为随着时间的推移,我们将实现越来越多的功能,并且 MVC1 和 MVC2 的测试运行表明我们已经准备好升级.
到目前为止,我们一直在使用 AuthorizeAttribute 的 Controller 和 Action 授权。
但这不会再这样做了,因为我们的视图应该根据登录的用户显示不同的结果。
用例:假设您是一个城市的专业人士,并且您登录到联邦管理的软件,并且您只能访问和编辑您所在城市的公民。
您可以通过包含MajorId 和CityId 的专用MajorHasRightsForCity 表中的条目访问这些公民。
我想到的是这样的:
Public ViewResult Edit(int cityId) {
if(Access.UserCanEditCity(currentUser, cityId) {
var currentCity = Db.Cities.Single(c => c.id == cityId);
Return View(currentCity);
} else {
TempData["ErrorMessage"] = "Yo are not awesome enough to edit that shizzle!"
Return View();
}
静态类Access 会进行各种检查并从它的方法中返回真或假。
这意味着每次更改某些内容时,我都需要更改和编辑所有控制器。 (这会很痛苦,因为每次发生变化时都需要调整所有单元测试......)
allowed 也在做类似的事情吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc-2 authorization scalability