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

时间:2016-01-16 21:39:36

标签: c# .net asp.net-mvc business-logic

我有一个内部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 个答案:

答案 0 :(得分:1)

  

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

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

无论如何,通过致电"images/unmute.png"然后检查要采取的行动从你的BL获取发票,因此对我而言,在GetInvoice()中保留此检查非常有意义而是把它放在业务层。

但是,是的,这是一个有争议的问题。