tmilos/scim-filter-parser

跨域身份管理系统(SCIM)AST过滤器解析PHP库

1.3.0 2017-01-19 11:17 UTC

This package is not auto-updated.

Last update: 2024-09-15 23:42:54 UTC


README

SCIM过滤器PHP解析器。SCIM代表跨域身份管理系统,更多详细信息可以在http://www.simplecloud.info/网站上找到。

Author Build Status Coverage Status Quality Score License Packagist Version SensioLabsInsight

用法

过滤模式

<?php
$parser = new Parser(Mode::FILTER());
$node = $parser->parse('userType eq "Employee" and (emails co "example.com" or emails.value co "example.org")');
/*
walk the node...

Conjunction = {
    ComparisonExpression => userType eq Employee
    Disjunction => {
        ComparisonExpression => emails co example.com
        ComparisonExpression => emails.value co example.org
    }
}
*/

路径模式

<?php
$parser = new Parser(Mode::PATH());
$node = $parser->parse('members[value eq "2819c223-7f76-453a-919d-413861904646"].displayName');
/*
walk the node...

Path = {
    ValuePath = {
        AttributePath = 'members'
        ComparisonExpression = value eq 2819c223-7f76-453a-919d-413861904646
    }
    AttributePath = displayName,
}
*/

更多详细信息,请查看过滤模式路径模式单元测试。

过滤和路径模式

SCIM v2为PATCH操作定义了与检索资源过滤器表达式不同的可解析路径语法。解析器默认在FILTER模式下,但您可以使用可选构造函数参数或使用Parser::setMode(Mode $mode)设置方法将其切换到PATH模式。

注意:路径模式仅适用于SCIM v2版本。

<?php
$parser = new Parser(Mode::PATH());
$parser->parse('username'); // OK
$parser->parse('username eq "xxx"'); // throws ParseException - Col 8: Expected end of input, but got ' '

SCIM过滤器版本

SCIM过滤器在v1和v2版本之间几乎没有变化,差异在于v2引入了新的ValuePath语法。解析器默认在v2模式下,您可以使用Parser::setVersion(Version::V1())设置方法或使用可选构造函数参数将其切换到v1模式。在v1模式下,遇到括号时会抛出语法错误。

<?php
$parser = new Parser(Mode::FILTER, Version::V1());
$parser->parse('emails[type eq "work"]'); // throws ParseException - Col 6: Expected SP, got '['