У меня есть ASP.NET MVC- веб-сайт с SQL Server фоновым. У меня есть несколько действий контроллера, которые требуют от меня проверки прав.Как я могу централизовать логику прав в контроллере asp.net-mvc?
Прямо сейчас, я делаю это:
public ActionResult SomeEntitledPage()
{
if (_myModel.IsMySiteAdminRole)
{
return View(new MyViewModel());
}
else
{
return View("NotEntitled", new NotEntitledViewModel(){Page = "[PageName]", SupportDG = "[email protected]"});
}
}
это работает хорошо, но он чувствует, как я дублируя эту логику в ряде мест.
Каков наилучший способ (атрибут и т. Д.), Чтобы количество действий контроллера прав было «безопасным» на основе нижеследующего?
(Secure том, что он проверяет IsMySiteAdminRole
и возвращает «не имеют права» вид, если не имеют права.
Я также хочу, чтобы убедиться, что я не снижение производительности на каждой странице?
Основываясь на ваши downvotes на ответы у всех ниже, хотя и являются наиболее очевидными ответами, я склонен просить вас, чтобы показать вашу модель представления, так что я могу видеть, что вы там делаете. Это вызывает запах дизайна, потому что нижеприведенные решения - это довольно текстовая книга, как и идея rbac. Это не должно быть так сложно. – Sinaesthetic
Прежде всего, откуда приходит _myModel? и если он отправлен из браузера, то это неправильный дизайн, любой может переопределить модель, отправленную с клиента. Если _myModel создается контроллером, то при создании самого контроллера вы можете выбросить UnauthorizedAccessException и создать для него правильную страницу ошибок. –
@leora Люди, которые ответили на ваши вопросы ниже, уделяют ценное время, чтобы предоставить вам продуманные ответы на ваш вопрос. Не вежливо, чтобы люди, которые пытаются помочь вам, если они не дают вредный или глупый ответ. Учитывая, что ваш вопрос дает очень мало деталей, неудивительно, что они предоставляют ответы, которые не соответствуют вашим потребностям? – B2K