Dovrete personalizzare il flusso di lavoro, come di seguito:
- andare a Zope Management Interface-> portal_workflow
- creare un nuovo stato, diciamo "Trailer" (questo è facoltativo, si poteva personalizzare uno stato esistente invece ... forse lo stato privato sarebbe una buona opzione per gestire restrizioni per specifici utenti/gruppi)
- Rimuovere tutte le autorizzazioni tranne "Accesso alle informazioni del contenuto" dall'utente anonimo in quello stato specifico
- Push "Aggiornamento sicurezza s pulsante "ettings"
Fatto! Ora tutti i contenuti nello stato "Trailer" saranno ricercabili ma non visibili da utenti anonimi.
Nota: se si sceglie di creare un nuovo stato, come suggerirei, assicurarsi di aggiungere anche tutte le transizioni necessarie.
Edit:
Purtroppo non ero consapevole del fatto che nelle versioni più recenti di Plone, c'è un nuovo indice nella portal_catalog (allowedRolesAndUsers) che impedisce il processo di cui sopra a lavorare come in passato. Il processo sopra è ancora corretto, anche se dovrai sostituire l'indicizzatore predefinito. Primo create a new package with paster utilizzando il modello "plone". Quindi aggiungere nel livello principale del pacchetto (ad es my.package/mio/pacchetto) un file chiamato indexers.py
con questo:
from zope.interface import Interface
from plone.indexer.decorator import indexer
from AccessControl.PermissionRole import rolesForPermissionOn
from Products.CMFCore.utils import getToolByName
from Products.CMFCore.CatalogTool import _mergedLocalRoles
@indexer(Interface)
def allowedRolesAndUsers(obj):
"""Return a list of roles and users with View permission.
Used by PortalCatalog to filter out items you're not allowed to see.
"""
allowed = {}
for r in rolesForPermissionOn('Access contents information', obj):
allowed[r] = 1
# shortcut roles and only index the most basic system role if the object
# is viewable by either of those
if 'Anonymous' in allowed:
return ['Anonymous']
elif 'Authenticated' in allowed:
return ['Authenticated']
localroles = {}
try:
acl_users = getToolByName(obj, 'acl_users', None)
if acl_users is not None:
localroles = acl_users._getAllLocalRoles(obj)
except AttributeError:
localroles = _mergedLocalRoles(obj)
for user, roles in localroles.items():
for role in roles:
if role in allowed:
allowed['user:' + user] = 1
if 'Owner' in allowed:
del allowed['Owner']
return list(allowed.keys())
e quindi allo stesso livello aggiungere un file overrides.zcml
con questo:
<configure xmlns="http://namespaces.zope.org/zope">
<adapter factory=".indexers.allowedRolesAndUsers" name="allowedRolesAndUsers" />
</configure>
alla fine l'albero del vostro prodotto dovrebbe essere simile a questo:
my.package/
├── my
│ ├── __init__.py
│ └── package
│ ├── configure.zcml
│ ├── overrides.zcml
│ ├── indexers.py
│ ├── __init__.py
│ ├── profiles
│ │ └── default
│ │ └── metadata.xml
│ └── tests.py
├── README.txt
├── setup.cfg
└── setup.py
Ultima cosa, è necessario includere l'uovo appena creato nel vostro buildout.cfg:
eggs =
my.package
develop =
src/my.package
Riavviare il buildout. È tutto.
fonte
2012-03-12 17:22:24
Il contenuto "privato" è collegato nei menu e nelle ricerche? In tal caso, cosa succede quando gli utenti anonimi visitano questi link? –
Il contenuto "privato" viene visualizzato solo dagli amministratori o dagli utenti o gruppi assegnati. Se un utente anonimo visita un link, reindirizza alla pagina di accesso come previsto.Il mio obiettivo è quello di trovare un modo per avere il contenuto che appare nel menu e cercare, ma reindirizza per accedere quando la pagina o la cartella viene visitata. –