Должна ли авторизация быть в контроллере или бизнес-логике

У меня есть внутренняя система 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 скорее иметь это на бизнес-уровне.

Но да, это своего рода спорный вопрос.

Другие вопросы по тегам