授权验证应该在控制器还是业务逻辑中



我有一个内部CRM系统,客户能够查看他们的发票。

函数中的第 5 行检查发票是否属于登录的客户(如果(发票。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。

或者有更好的方法可以做到这一点吗?

是否应将此检查移动到业务逻辑中?

是的,您可以,在这种情况下,您将已将登录的用户身份传递给 BL 方法调用。但是我认为在您的控制器本身中保留此检查没有任何问题。

无论如何,您都可以通过致电 GetInvoice() BL 从您的 BL 获取发票,然后进行检查以查看要采取的操作,因此对我来说,将此支票保留在您的controller Action而不是将其放在业务层中非常有意义。

但是,是的,这是一个争论性的问题。

最新更新