Должна ли авторизация быть в контроллере или бизнес-логике
У меня есть внутренняя система CRM с возможностью для клиентов видеть свои счета.
5-я строка в функции проверяет, принадлежит ли счет зарегистрированному клиенту (if (invoice.CustomerId!= LoggerInCustomerId)).
Я не уверен, что именно здесь следует провести эту проверку.
public ActionResult ViewInvoice(Guid invnum)
{
int loggerInCustomerId = GetTheLoggedInCustomerId();
Invoice invoice = _invoiceLogic.GetInvoice(invnum);
if (invoice.CustomerId != loggerInCustomerId)
{
//Invalid Action
return RedirectToAction("Index", "MyInvoices");
}
//do other stuff as normal
}
Следует ли перенести эту проверку в бизнес-логику? GetInvoice будет принимать параметр номера счета и параметр для вошедшего в систему пользователя. Затем GetInvoice выполнит эту проверку и выдаст исключение, в моем методе действия будет "Try Catch".
Или есть лучший способ сделать это?
1 ответ
Следует ли перенести эту проверку в бизнес-логику?
Да, вы можете, и в этом случае вы должны будете передать идентификацию вошедшего в систему пользователя в вызов метода BL. Но я не вижу ничего плохого в том, чтобы хранить эту проверку в самом контроллере.
Вы в любом случае получаете счет от вашего БЛ по телефону GetInvoice()
а затем проверка, чтобы увидеть, какое действие необходимо предпринять, и, таким образом, для меня имеет смысл сохранить эту проверку в вашем controller Action
скорее иметь это на бизнес-уровне.
Но да, это своего рода спорный вопрос.