javascript 如何使用JayData定制OData服务器?

aoyhnmkz  于 2023-05-05  发布在  Java
关注(0)|答案(4)|浏览(172)

我对JayData很陌生,所以这听起来像是一个愚蠢的问题。我在这里阅读了OData服务器教程:http://jaydata.org/blog/install-your-own-odata-server-with-nodejs-and-mongodb-可以像这样设置OData提供程序,这令人印象深刻。但是,教程没有详细介绍如何自定义提供程序。
我很想知道如何使用自定义数据库设置它,以及如何向OData服务器添加身份验证/授权层。我的意思是,不是每个用户都有权限访问每个实体,也不是每个用户都有权限添加新实体。
我将如何使用JayData处理此类用例?

vlju58qv

vlju58qv1#

更新:

这里有两篇文章可以让你开始:

文章中经常使用的$data.createODataServer方法是一种方便的方法,它对您隐藏了connect/express管线。要与管道交互,请检查node_modules/odata-server文件夹中的$data.createODataServer函数的方法体。
忽略以下文本
身份验证必须通过连接管道来解决,有很多中间件可以解决这个问题。
对于授权,EntityContext构造函数接受一个必须是Promise感知的授权函数。
all-allow授权器看起来像这样。

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
            }

});

还有一种声明式的方法,你可以用实体集的权限来注解角色名,这需要你的用户对象实际上有一个角色字段,里面有一个角色名数组。

myzjeezk

myzjeezk2#

我最近也在研究oData,当我们在node和C#中开发我们的平台时,自然会关注JayStorm。从我对JayStorm的技术细节的理解来看,Connect和Express的整个功能都可以使这个主题成为可能。我们使用Restify来提供我们平台的私有API,并且我们已经为这种情况编写了许多中间件模块。

axzmvihb

axzmvihb3#

我们也使用JayData作为OData服务层,我用它实现了一个非常简单的基本身份验证。由于JayData使用Express,因此我们可以利用Express的功能。对于基本身份验证,最简单的方法是:

app.use(c.session({ secret: 'session key' }));
// Authenticator
app.use(c.basicAuth('admin', 'admin'));
app.use("/odata.svc", $data.JayService.OData.Utils.simpleBodyReader());

您还可以参考本文,了解使用Express进行身份验证的更多详细信息:http://blog.modulus.io/nodejs-and-express-basic-authentication
谢谢

pb3skfrl

pb3skfrl4#

我写了那篇博客,我为JayData工作。custom database是什么意思我们已经编写了一个用于身份验证和授权的中间件,但它不是开源的。我们可以稍后发布它。我们有一个叫JayStorm的服务,它有一个免费版本,也许这对你有好处。我们可能会发布它的应用程序版本。

相关问题