2014-12-26 3 views
1

В чем разница между XACML, который использует функцию AND, которая содержит два условия, например. одним условием будет время в диапазоне 1-6 и датировано 23/07/2015XACML - Разница между условием И и двумя правилами

И у другого XACML будет два правила: одно правило будет находиться в диапазоне 1-6, а второе правило - равно 23/07/2015.

Я имею в виду, как они работают? Первый, функция AND должна быть верной, чтобы получить эффект разрешения. Как насчет второго? Будет ли просто проверять, является ли одно из этих двух правил истинным и дает эффект разрешения или оба правила должны быть истинными, как первый?

ответ

2

Прежде всего, давайте сделаем шаг назад и обновим наши воспоминания. Есть 3 структурные элементы в XACML:

  • PolicySet, которые могут содержать PolicySet и Policy элементы
  • Policy, которые могут содержать Rule элементы.
  • Rule, которые содержат желаемый эффект (разрешение или запрет).

Rule содержит как Target элемент и элемент Condition, которые определяют, когда будет применяться правило.

Rule будет применяться только и вернуть его действие, если оба Target и Condition оценить истина, т.е. если все матчи в Target являются правильными и если все части Condition в конечном счете оценить в True.

Давайте возьмем ваш пример:

  • Правило 1: вернуть разрешение, если ток время> 1 вечер и текущее время < 6 вечера и дата == 23/07/2015.

Код в ALFA будет:

policy parent{ 
    apply firstApplicable 
    rule example{ 
     permit 
     condition currentTime>"13:00:00":time && 
        currentTime<"18:00:00":time && 
        currentDate=="2015-07-23":date 
    }  
} 

Правило будет применимо только и только вернуть его действие, в данном случае разрешение, если все матчи в состоянии оценить, верно.

Что делать, если мы используем 2 правила для выражения той же логики? Что происходит тогда? Разделим условие на 2 правила:

policy parent{ 
    apply firstApplicable 
    rule checkTime{ 
     permit 
     condition currentTime>"13:00:00":time && 
        currentTime<"18:00:00":time 
    }  
    rule checkDate{ 
     permit 
     condition currentDate=="2015-07-23":date 
    } 
} 

Что происходит? Результат не тот. На самом деле, если политика имеет 2 правила для детей, как она определяет, какой из них следует учитывать? Здесь находится шаг combining algorithms. Алгоритм комбинирования определяется на уровне политики и на уровне PolicySet. См. here for a full list and details.

В приведенном выше примере, мы используем

apply firstApplicable 

Это означает, что если Правило говорит разрешение, то второй один даже не будет рассматриваться для оценки. Другими словами, ограничение даты не будет проверяться. Следовательно, набор из 2 правил не эквивалентен первоначальному условию, которое мы написали.

Мы все еще можем переработать 2 правила, чтобы они работали как условие - или почти. Один из таких способов состоит в том, чтобы повернуть проверки и сделать правила отрицательными: отрицать, если время находится за пределами диапазона 1-6. Запретить, если дата «2015-07-23». Только тогда можно будет определить правило разрешения для доступа. Переработан пример становится в АЛЬФА:

policy parent{ 
    apply firstApplicable 
    rule checkTime{ 
     deny 
     condition currentTime<="13:00:00":time || 
        currentTime>="18:00:00":time 
    }  
    rule checkDate{ 
     deny 
     condition not(currentDate=="2015-07-23":date) 
    } 
    rule allowAccess{ 
     permit 
    } 
} 

Суть, однако, это: то, что вы хотите выразить? Важно ли проводить различие между проверкой времени и проверкой даты? Имеет ли смысл иметь в виду 2 правила? Единственное правило? Это полностью зависит от вас.

Для редактирования типовых политик вы можете скачать ALFA plugin from here.

HTH

+0

Спасибо за ваш ответ Дэвид. Очень понятно. Просто быстрый вопрос. Вторая политика с двумя правилами работает, как и ворота ИЛИ, другими словами, верно ?. (Просто, чтобы сделать это более ясным для себя). И в случае, если у нас есть 3 или 4 правила, опять же, если первое правило - True, то остальные, не будут рассматриваться, правильно? – Bobys

+0

В некотором смысле да, он работает как неисключительный ИЛИ. Но помните, что XACML может оценить NotApplicable. Это точка окончательного пустого правила - чтобы убедиться, что мы не получаем NotApplicable. Вы можете прочитать больше об объединении алгоритмов здесь: http://developers.axiomatics.com/blog/index/entry/understanding-xacml-combining-algorithms.html –

+1

Спасибо. Ваш ответ отмечен как принятый! – Bobys

Смежные вопросы