Многоуровневая безопасность в Plone? - PullRequest
1 голос
/ 10 марта 2011

есть ли способ выполнить следующее?

Я бы хотел, чтобы каждый объект в Plone был связан с еще одной классификацией безопасности (например, «альфа», «браво», «зулу»).Эти классификации будут частью схемы типа контента.Во время выполнения учетные данные пользователя будут сравниваться с объектом, и тогда и только тогда, когда у пользователя будет все учетные данные объекта, объект будет доступен для просмотра.Я не вижу никакого способа сделать это в рабочем процессе.

Открыто для предложений.Спасибо!

Стэн

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

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

2 голосов
/ 10 марта 2011

Вам необходим адаптер локальной роли, который может проверять учетные данные пользователя (предположительно, у вас уже есть кто-то, кто предоставит им такие учетные данные, поскольку, помимо базовой концепции ролей, их нет в базовом Plone), и предоставит local_roleна основе результата.

См .: http://plone.org/products/plone/roadmap/208.

Это может быть так же просто, как предоставление метода __ac_local_roles (), но если нет, borg.localrole теперь является частью Plone, и эта ссылкадолжен начать.

1 голос
/ 10 марта 2011

Вот также, как вы могли бы сделать это с рабочим процессом. Заметьте, я не говорю, что вы должны сделать это с помощью рабочего процесса, просто вы можете;) Вам потребуется (большое) количество штатов. Насколько велико, зависит от комбинаций (! = Перестановок) ваших состояний безопасности. Комбинации выбора m вещей среди n определяются следующим образом:

n!/(m!(n-m)!),

где! является факториалом.

Например, в приведенном вами примере у вас есть 3 состояния безопасности: альфа, браво и зулу. Это дает:

3!/(1!2!) + 3!/(2!1!) + 3!/(3!0!) = 3 + 3 + 1 = 7

Сумма - это комбинации, состоящие из 1, 2 или 3 из них. Итак, все семь штатов;)

Переходы - это другой зверь. Если вам нужно иметь возможность перейти из любого из этих комбинированных состояний в любое другое, то вам придется рассчитывать перестановки, поскольку переход от a к b отличается от перехода от b к a. Перестановки даются:

n!/(n-m)!

т.е. для 7 состояний выше у вас будет 7! / (7-2)! = 7 * 6 = 42 (!!!) переходов. Конечно, вы могли бы упростить переходы, разрешив добавлять / удалять только одно состояние безопасности каждый раз. Вот, пожалуйста, надеюсь, вам будет так же интересно читать это, как и мне:)

...