В настоящее время мы переписываем приложение ASP.NET MVC для наших организаций, которое уже было написано дважды. (Один раз MVC1, один раз MVC2). (Слава богу, что тогда производство еще не было готовым и слишком зрелым).
На этот раз, во всяком случае, это будет реальная сделка , потому что со временем мы будем реализовывать все больше и больше функций, и тестовые прогоны с MVC1 и MVC2 показали, что мы готовы к повышению.
До сих пор мы использовали авторизацию Controller и Action с AuthorizeAttribute
.
Но этого больше не будет, потому что наши представления должны показывать разные результаты в зависимости от зарегистрированного пользователя.
Вариант использования : Допустим, вы крупный город, и вы входите в федеральное управляемое программное обеспечение, и вы можете только просматривать и редактировать граждан в своем городе.
Если вам разрешен доступ к этим гражданам через запись в специализированной таблице MajorHasRightsForCity
, содержащей MajorId
и CityId
.
То, о чем я думал, примерно так:
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
будет выполнять все виды проверок и возвращает из своих методов либо true, либо false.
Это означает, что мне нужно будет менять и редактировать все мои контроллеры каждый раз, когда я что-то меняю. (Это было бы больно, потому что все юнит-тесты должны были бы корректироваться каждый раз, когда что-то меняется ..)
Делает что-то подобное даже allowed
?