Использование математики в ALFA - PullRequest
0 голосов
/ 29 мая 2018

Как получить работающее правило:

rule adminCanViewAllExams {
        condition (integerOneAndOnly(my.company.attributes.subject.rights) & 0x00000040)  == 0  
        permit
}

Подсветка синтаксиса жалуется, что не знает эти элементы:

  • & (Это двоичная математическая операция)
  • 0x00000040 (это шестнадцатеричное представление целого числа)

EDIT

(добавление комментария OP в вопросе)

Я хочу сохранить как можно больше в моем текущем приложении.То есть я не хочу сильно меняться в своей модели базы данных.Я просто хочу реализовать новую часть PEP и PDP.Итак, в настоящее время права пользователя хранятся в Long.Каждый бит в номере представляет собой право.Чтобы получить право, мы выполняем двоичную операцию, которая маскирует другие биты в LongМы могли бы переработать эту часть, но все же хорошо знать, как далеко заходит поддержка математических операций

1 Ответ

0 голосов
/ 31 мая 2018

XACML не поддерживает побитовую логику.Он может выполнять булеву логику (И и ИЛИ), но это все.

Чтобы достичь того, что вы ищете, вы можете использовать Информационный пункт политики, который будет принимать значения my.company.attributes.subject.rights и 0x00000040.Он вернет атрибут с именем allowed.

В качестве альтернативы, вы можете расширить XACML (и ALFA), чтобы добавить отсутствующие типы данных и функции.Но я бы порекомендовал пойти на читабельную политику.

...