Контроль доступа к будущему контенту

в основном это публичный контент, рассчитанный на будущее, но не только.

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

Тем не менее, в этот момент, если анонимный / вошедший в систему пользователь знает URL, он сможет видеть содержимое.

В нашем случае, газета, у нас есть не только это (контент, рассчитанный на будущее), но у нас также есть разные роли пользователей, которым нужно или не нужно видеть этот контент (платные подписчики / премиум-пользователи ...).

Проверка наView разрешение, т.е.

security = getSecurityManager()
if security.checkPermission('View', obj):
   # user can see the object

недостаточно.

Проверьте разрешение на просмотр и, если контент в будущем, т.е.

security = getSecurityManager()
if security.checkPermission('View', obj) and \
        not object.effective_date.isFuture():
   # user can see the object

Опять же, этого недостаточно, так как некоторым пользователям действительно нужно видеть будущий контент (то есть редакторы контента), в то время как обычные пользователи не должны его видеть, и, в дополнение к этому, пользователи премиум-класса должны их видеть, поэтому что-то вроде этого будет действительно так:

security = getSecurityManager()
if security.checkPermission('View', obj) and \
        (not object.effective_date.isFuture() or 
         security.checkPermission('Can see future content', obj):
   # user can see the object

Но тогда возникает вопрос: так как это должно использоваться на всем сайте (ведущие страницы, статьи, перекрестные ссылки, навигация, поиски ...), это не правильно и довольно утомительно, чтобы повторить все эти проверки все повсюду.

Есть ли другой подход к решению этой проблемы?

Ответы на вопрос(2)

Ваш ответ на вопрос