Просто проверьте наличие в целевом предложении ALFA - PullRequest
0 голосов
/ 25 мая 2018

Я хочу написать целевое предложение, которое говорит: «Если установлен определенный атрибут (oneAndOnly), то применяется политика».Я видел [mustbepresent] вещь, однако, она всегда требует компаратора (например, ==).

Это был мой подход, но проверка синтаксиса жалуется ...

policy reportPolicies  {
        target  clause stringBagSize(my.company.person.doctor.id)==1        
}

Я видел, как вы определяете строковый атрибут "resourceType", но мне не нравится определять такой метаатрибут.Я бы предпочел проверить наличие определенных атрибутов.

1 Ответ

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

Опять же, отличные вопросы.Да, я часто использую атрибут искусственный , например, resourceType, и сравниваю его со значениями, например, medical record или transaction.Вам не нужно этого делать, потому что сами идентификаторы атрибутов передают тот факт, что вы имеете дело с тем или иным.Тем не менее, я думаю, что это помогает политике быть более читабельной.

В связи с другой проблемой: как убедиться, что атрибут имеет хотя бы одно значение.В элементе Target вы можете использовать тег mustBePresent, но он мне не нравится.Если атрибут не имеет значения, то PDP возвращает Indeterminate, и это приводит к короткому замыканию оценки.

Альтернативой является сравнение атрибута с использованием> (больше чем).Например:

  • clause user.role > ""
  • clause user.age>0

Это приведет к определению значения.

Очистительспособ сделать это, однако, это использовать функции bag внутри условия.Например,

condition stringBagSize(user.role)>0 // True if the user has at least one role
...