簡體   English   中英

控制對未來內容的訪問

[英]Control access on future content

這主要是關於未來定時的公共內容,但不僅限於此。

在標准的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

但是問題就在於:由於必須在整個網站(主要頁面,文章,交叉鏈接,導航,搜索...)中使用它,因此感覺不正確,並且必須重復所有這些檢查,這非常繁瑣遍地都是。

還有其他解決方法嗎?

有一個插件產品可以完全滿足您的需求:

collective.wfeffectiverange

它的工作方式是添加一個cron作業,以查找尚未發布的內容(將來的生效日期)或過期的內容(已達到失效日期),並在這種情況下應用工作流程過渡。

有關更多信息,請參見https://pypi.python.org/pypi/collective.wfeffectiverange

1.)根據您想要的特權級別創建一個內容類型(“高級”,“付費訂戶”),並為每個特權級分配一個專用的工作流程,分別至少持有狀態“編輯者審閱”和“高級發布” “編輯者審查”和“付費訂閱發布”,並將各州連接到同等角色(“編輯者”,高級用戶,“付費訂閱者”),以按預期授予查看權限。 另外,建議為每個角色創建一個組,將它們連接在一起,然后將用戶分配給這些組,而不是分配給角色。

2.)使用Collective.contentrules.comingsoon來應用一個contentrule,當滿足發布日期(通過瀏覽器視圖執行,觸發了cron)。

3.)為了克服Plone的默認設置,即將來設置了發布日期的項目不會出現在導航元素中,您需要自定義/覆蓋引用模板。 其中包括globalnav,navportlet,站點地圖,folder_listing等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM