我对 JayData 很陌生,所以这听起来像是一个愚蠢的问题。 我在这里阅读了 OData 服务器教程:http://jaydata.org/blog/install-your-own-odata-server-with-nodejs-and-mongodb - 令人印象深刻的是,可以像那样设置 OData 提供程序。但是教程没有详细介绍如何自定义提供程序。
我有兴趣了解如何使用自定义数据库对其进行设置以及如何向 OData 服务器添加身份验证/授权层。我的意思是,并非每个用户都可能拥有对每个实体的权限,也不是每个用户都拥有添加新实体的权限。
我将如何使用 JayData 处理此类用例?
预先感谢您的回答!
最佳答案
更新:
这里有两篇文章可以帮助您入门:
帖子中经常使用的$data.createODataServer
方法是一种对您隐藏connect/express pipleline 的便捷方法。要与管道交互,请检查在 node_modules/odata-server 文件夹中找到的 $data.createODataServer
函数的方法体。
忽略下面的文字
身份验证必须通过连接管道解决,为此有大量的中间件。
对于授权,EntityContext 构造函数接受必须是 promise 感知的授权函数。
全允许授权器看起来像这样。
function checkPerm(access, user, entitysets, callback) {
var pHandler = new $data.PromiseHandler();
var clbWrapper = pHandler.createCallback(callback);
var pHandlerResult = pHandler.getPromise();
clbWrapper.success(true); // this grants a joker rw permission to everyone
//consult user, entitySet and acces to decide on success/error
//since you return a promise you can call async stuff (will not be fast though)
return pHandlerResult;
}
我必须就让您将其传递到构建过程中的语法咨询其中一位团队成员 - 但我可以确认这是可行的并且受到支持。我会尽快回复。
对用户进行身份验证后,您还可以使用 EntityContext Level Events拦截读取/更新/创建/删除操作。
$data.EntityContext.extend({
MySet: { type: $data.EntitySet, elementType: Foobar,
beforeDelete: function(items) {
//if delete was in batch you'll get multiple items
//check items here,access this.request.user
return false // deny access
}
});
还有一种声明方式,你可以用实体集的权限来注释 Angular 色名称,这要求你的用户对象实际上有一个包含 Angular 色名称数组的 Angular 色字段。
关于javascript - 如何使用 JayData 自定义 OData 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663769/