代码之家  ›  专栏  ›  技术社区  ›  anonymous

ASP。NET MVC:动作中的授权——建议的模式还是一种气味?

  •  10
  • anonymous  · 技术社区  · 17 年前

    所以我只剩下两个问题:

    4 回复  |  直到 17 年前
        1
  •  3
  •   Josh E    17 年前

    [Authorize(Roles="Shipping, Accounting")]
    public ActionResult Edit(int id)
    {
        Shipment shipment = repos.GetShipment(id);
    
    
        switch (shipment.State)
        {
             case ShipmentState.A:
             if (Roles.IsUserInRole("Shipping"))
                    return View(shipment);
             else
                    return View("NotAuthorized");
             break;
             case ShipmentState.B:
             if (Roles.IsUserInRole("Accounting"))
                    return View(shipment);
             else
                   return View("NotAuthorized");
             break;
             default:
                  return View("NotAuthorized");
         }
    }
    
        2
  •  2
  •   Matt Hinze    17 年前

    对于第1个,有许多模式可以在域对象中实现丰富的行为。在双分派中,您将对服务抽象(接口)的引用传递给对象上的方法。然后它就可以做自己的事了。您还可以编写一个应用程序服务来接收装运并完成工作。

    第二,不一定。你可能需要将“上下文装运”的概念抽象到一个服务中,该服务可以找出你所处的装运上下文。但我会一直这样做,直到你再次需要它。

        3
  •  1
  •   Igor Brejc    17 年前

    你可以看看 Rhino.Security ,它可用于在这些场景中实现用户授权。

        4
  •  1
  •   chris166    17 年前

    除了上述答案之外,您还可以返回HttpUnauthorized结果,而不是为NotAuthorization创建自己的视图。这将重定向到登录页面,其行为与通常的[Authority]属性一样

    推荐文章