gpt4 book ai didi

asp.net-web-api - 如何使用 Breeze JS 处理授权?

转载 作者:行者123 更新时间:2023-12-02 11:19:02 26 4
gpt4 key购买 nike

目前,我的应用程序查看路由器参数并登录用户 (Principal.Identity) 以授权访问某些资源(例如:将学生添加到您的类(class) [身份 + 类(class) ID])。然而,如果我没记错的话,breeze js只支持一次批量保存。看来我必须打开每一个数据并进行验证/授权。那就好啦,

但是我可能会失去的是业务逻辑(作为消息处理程序)之外的横切关注点的良好分离(查找用户在类中拥有的角色)和不错的授权注释功能(只需说出角色是什么)需要)。那么我是否必须权衡或者是否有 Breeze JS 可能建议的更好的编程模型?

更新:我的问题更多是关于如何将授权(在消息处理程序中查找分配的角色+通过向 Controller 方法添加授权属性来验证是否存在所需的角色)逻辑与业务或数据访问逻辑分开。如果没有 Breeze ,我将检查传入消息及其路由参数以获取其所有角色,然后在我的 put/post/delete 方法中用所需的角色进行注释。我无法将这种技术与 Breeze 一起使用(这不是 Breeze 的限制,而是当您进行批量保存时的权衡)。所以想知道是否有任何编程模型或设计模式已经被 Breeze 家伙使用过。在 Breeze 的示例中,有一些东西会覆盖上下文并使用存储库模式,现在将遵循这一点。

最佳答案

Breeze 可以拥有任意数量的“保存”端点。例如,假设的服务器实现可能是

[BreezeController]
public class MyController : ApiController {

[HttpPost]
[Authorize(...)]
public SaveResult SaveCustomersAndOrders(JObject saveBundle) {
// CheckCustomersAndOrders would be a custom method that validates your data
ContextProvider.BeforeSaveEntitiesDelegate = CheckCustomerAndOrders;
return ContextProvider.SaveChanges(saveBundle);
}

[HttpPost]
[Authorize]
public SaveResult SaveSuppliersAndProducts(JObject saveBundle) {
...
}

您可以像这样调用这些端点

var so = new SaveOptions({ resourceName: "SaveWithFreight2", tag: "运费更新"});

   myEntityManager.saveChanges(customerAndOrderEntities, { 
resourceName: "SaveCustomersAndOrder" }
).then(...)

   myEntityManager.saveChanges(supplierAndProductEntities, { 
resourceName: "SaveSuppliersAndProducts" }
).then(...)

授权是通过每个 [HttpPost] 方法上的 [Authorize] 属性来进行的。您可以在此处阅读有关 [Authorize] 属性的更多信息: http://sixgun.wordpress.com/2012/02/29/asp-net-web-api-basic-authentication/

关于asp.net-web-api - 如何使用 Breeze JS 处理授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180078/

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