Контроль доступа к будущему контенту
в основном это публичный контент, рассчитанный на будущее, но не только.
На стандартном сайте 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
Но тогда возникает вопрос: так как это должно использоваться на всем сайте (ведущие страницы, статьи, перекрестные ссылки, навигация, поиски ...), это не правильно и довольно утомительно, чтобы повторить все эти проверки все повсюду.
Есть ли другой подход к решению этой проблемы?