我需要实现一个支持将用户查询为 SCIM 过滤规范https://www.rfc-editor.org/rfc/rfc7644#section-3.4.2.2的 ASP.NET Web API 。
最快的方法是什么?我知道我需要实现一个可以解析过滤表达式的解析器,然后使用专用的用户存储库执行该表达式并返回选定的实体,但是从头开始实现该解析器是一项巨大的工作,对吧?
有没有更快的方法或更标准的方法来支持 SCIM 过滤?
请参阅https://github.com/PowerDMS/Owin.Scim
我已经实现了它,使得 Owin.Scim 获取过滤器字符串,无论是查询过滤器还是补丁过滤器,对其进行规范化,然后构造一个表达式树/lambda 谓词,您可以在 linq 中使用它。
尚未实现的是如何支持 SCIM 的根目录查询——您可以在其中一次过滤多种资源类型。
ScimFilter
通过支持资源扩展来规范化字符串。修补是一个完全独立的过程,它使用自定义的 json.net 合同解析器。在撰写本文时,ScimFilter 将为您提供 PathFilterExpressions 列表。(如果您正在查询,您将只有一个)。
您可以使用扩展方法来获取PathFilterExpression
并取回强类型谓词 ( Func<Resource, bool>
)。请参阅:https ://github.com/PowerDMS/Owin.Scim/blob/master/source/Owin.Scim/Extensions/PathFilterExpressionExtensions.cs
或者,您可以获取 alpha Owin.Scim.Antlr dll。 https://github.com/PowerDMS/Owin.Scim/tree/master/source/lib
这会给你ScimFilterLexer
& ScimFilterParser
。