3

我对 JayData 很陌生,所以这听起来像是一个愚蠢的问题。我在这里阅读了 OData 服务器教程:http: //jaydata.org/blog/install-your-own-odata-server-with-nodejs-and-mongodb - 可以设置 OData 提供程序,这令人印象深刻就这样。但是,本教程没有详细介绍如何自定义提供程序。

我有兴趣了解如何使用自定义数据库进行设置,以及如何向 OData 服务器添加一层身份验证/授权。我的意思是,不是每个用户都有权访问每个实体,也不是每个用户都有权添加新实体。

我将如何使用 JayData 处理此类用例?

提前感谢您的回答!

4

4 回答 4

2

更新:

这里有两篇文章可以帮助您入门:

帖子中经常使用的$data.createODataServer方法是一种方便的方法,它对您隐藏连接/快递管道。要与管道交互,请检查$data.createODataServernode_modules/odata-server 文件夹中的函数方法体。


忽略下面的文字

身份验证必须通过连接管道来解决,为此有大量的中间件。

对于授权 EntityContext 构造函数接受一个必须知道承诺的授权函数。

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 级别事件来拦截读取/更新/创建/删除操作。

$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
            }

});

还有一种声明方式,您可以使用实体集上的权限注释角色名称,这要求您的用户对象实际上有一个角色字段,其中包含角色名称数组。

于 2013-04-04T18:07:17.717 回答
1

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

于 2013-02-10T08:28:52.900 回答
1

我们也将 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

谢谢。

于 2013-03-13T01:46:30.433 回答
-2

我写了那篇博文,我为 JayData 工作。自定义数据库是什么意思?我们编写了一个用于身份验证和授权的中间件,但它不是开源的。我们可能会在稍后发布它。我们有一个叫 JayStorm 的服务,它有一个免费版本,也许这对你有好处。我们可能会发布它的设备版本。

于 2013-02-02T16:36:33.640 回答