【问题标题】:Should authorization validation be in the controller or business logic [closed]授权验证是否应该在控制器或业务逻辑中[关闭]
【发布时间】:2016-04-22 07:23:51
【问题描述】:

我有一个内部 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。

或者有更好的方法吗?

【问题讨论】:

  • 是的,最好将其移动到业务逻辑中,这样代码重用能力也将在那里。
  • 这个问题没有一个好的答案,因此应该关闭。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多