首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCIM补丁库

SCIM补丁库
EN

Stack Overflow用户
提问于 2019-11-19 16:43:24
回答 3查看 871关注 0票数 2

我正在为我的当前项目实现SCIM配置,并且我正在尝试实现修补程序方法,这似乎并不容易。

我在RFC中看到的是,SCIM修补程序几乎像JSON补丁,但是当我深入研究时,它似乎对路径的描述方式有了一些不同,这不允许我使用json补丁库。

示例:

代码语言:javascript
复制
"path":"addresses[type eq \"work\"]"

"path":"members[value eq
              \"2819c223-7f76-453a-919d-413861904646\"]"

您知道有哪个库正在进行SCIM修补程序吗?我的项目目前是一个节点项目,但是如果需要的话,我不关心我可以用javascript重写它的语言。

编辑

我终于为此创建了自己的库,它名为scim-patch,可在npm https://www.npmjs.com/package/scim-patch上使用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-05 14:24:03

由于我没有找到任何类型记录库来实现scim修补程序操作,所以我已经实现了自己的库。

你可以在这里找到它:https://www.npmjs.com/package/scim-patch

票数 0
EN

Stack Overflow用户

发布于 2019-12-06 20:20:29

我在自己的库中实现SCIM修补程序操作。请看一下这里这里。它目前正在为v2进行中,但补丁操作所需的CRUD功能已经成熟。

首先,您需要一种解析SCIM路径的方法,SCIM路径可以选择包含一个过滤器。我实现了一个有限状态机来解析路径和过滤器。扫描器将遍历文本的每个字节并指出有趣的事件,解析器将使用该扫描器将文本分解为有意义的标记。例如,emails[value eq "foo@bar.com"].type可以细分为emails[eq"foo@bar.com"]type。最后,编译器将接收这些令牌输入并将其组装到一个抽象语法树中。在纸面上,它看起来如下所示:

代码语言:javascript
复制
emails -> eq -> type
        /   \
     value  "foo@bar.com"

接下来,您需要根据抽象语法树遍历资源数据结构。我设计了我的属性模型,以携带对SCIM属性的引用。请考虑以下资源:

代码语言:javascript
复制
{
   "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
   "userName": "imulab",
   "emails": [
      {
         "value": "foo@bar.com",
         "type": "work"
      },
      {
         "value": "bar@foo.com",
         "type": "home"
      }
   ]
}

我从资源的根开始遍历,并找到名为emails的子元素,它将返回一个复杂类型的multiValued属性。我看到我的下一个令牌(eq)是过滤器的根,所以我对emails的两个元素执行筛选操作。对于每个元素,我将向下分析value子元素并计算它的值。由于只有第一个元素与筛选器匹配,所以我最终从该复杂属性的type子元素开始,并到达目标属性。在那里,您可以自由地执行AddReplaceRemove操作。

有两件事我建议你提防。

有一件事是,当您访问multiValued属性时,遍历路径将被拆分。在上面的例子中,我们只有一个与过滤器匹配的元素。实际上,我们可能有很多匹配项,或者根本没有过滤器,迫使您遍历所有元素。

另一个是SCIM路径的语法。该规范要求可以在实际路径前面加上模式URN的前缀,并使用:对它们进行分隔。所以在这个表示法中,emails.typeurn:ietf:params:scim:schemas:core:2.0:User:emails.type是实际的等价物。注意,模式URN包含2.0部分中的点(2.0)。这造成了进一步的复杂性,现在您不能简单地用.分隔文本并希望得到所有正确的标记。我使用Trie数据结构将所有模式URN记录为保留字。每当我在路径中启动一个新段时,我都会尝试在Trie中匹配它,而不仅仅依靠.来终止这个段。

希望它能对你的工作有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2019-11-29 07:44:05

请看一下scim2 2过滤器解析器:https://github.com/15five/scim2-filter-parser

它是一个主要由作者的django-scim2 2库:https://github.com/15five/django-scim2使用的库。

它依赖于python对象,但我认为您应该从那里获得一些外快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58939006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档