gpt4 book ai didi

authorization - 在哪里验证命令的授权?

转载 作者:行者123 更新时间:2023-12-03 23:53:28 24 4
gpt4 key购买 nike

问题的标题几乎可以恢复:我在哪里验证命令的授权?

例如,将客户设置为首选包括:

  • MarkAsPreferred Controller Action (可以是 Winforms 或其他);
  • SetCustomerAsPreferredCommand ;
  • SetCustomerAsPreferredCommandHandler ;
  • Customer.MarkAsPreferred() (领域);

  • 我确定了 3 个检查授权的地方:
  • 用户界面 用于显示目的(如果用户无权访问链接/按钮,则不应看到该链接/按钮);
  • Controller Action 验证用户有权调用该命令;假设命令总是成功(关于验证,但我也假设授权),我们有机会通知用户缺乏访问权限;
  • 命令内部 就在调用域逻辑之前;

  • SomeView.cshtml
    if (authorizationService.Authorize("MarkCustomerAsPreferred))
    {
    // show link
    }

    客户 Controller
    [HttpPost]
    public ActionResult MarkAsPreferred(Guid id)
    {
    if (!authorizationService.Authorize("MarkCustomerAsPreferred))
    {
    return RedirectToAction("Unauthorized");
    }

    var MarkCustomerAsPreferredCommand { Id = id };
    ...
    }

    MarkCustomerAsPreferredCommandHandler
    public void Handle(MarkCustomerAsPreferredCommand command)
    {
    if (!authorizationService.Authorize("MarkCustomerAsPreferred"))
    {
    throw new Exception("...");
    }

    customer.MarkAsPreferred();
    }

    我的问题是:我是否 需要在 3 个地方验证授权,还是我太热心了?

    我在互联网上搜索,但找不到任何关于此的示例或引用。

    编辑

    经过更多的研究和一些测试,我认为按照 Dennis Taub 的建议包装命令以添加行为(授权、验证、日志记录)更容易、更清晰地实现。

    我找到了 this blog post这正好解释了这个概念。

    关于一个命令有多个处理程序,我不需要为每个原始命令的每个行为实现一个命令处理程序,一个包装命令可以包装所有处理程序。

    最佳答案

    我认为最终授权应该在应用程序服务级别完成,即作为处理命令的一部分。例如,您可以使用授权处理程序包装命令处理程序。

    class AuthorizationHandler : IHandle<SetCustomerAsPreferred> {

    IHandle<SetCustomerAsPreferred> innerHandler;

    public AuthorizationHandler(IHandle<SetCustomerAsPreferred> handler)
    {
    innerHandler = handler;
    }

    public void Handle(SetCustomerAsPreferred command)
    {
    if (/* not authorized */)
    throw ...
    innerHandler.Handle(command);
    }

    }

    class SetCustomerAsPreferredCommandHandler : IHandle<SetCustomerAsPreferred> {

    public void Handle(SetCustomerAsPreferred command)
    {
    // do the work
    }

    }

    关于authorization - 在哪里验证命令的授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159804/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com