2012-03-12 12 views
6

olabilir yayınlanan sınırlandırmak yaPlone'un 4: yüklemek bir Plone 4.x üzerinde içerik

  1. yayınlanan içerik belli kullanıcı/grup veya kısıtlanabilir
  2. özel içerik için menüler ve aramalarda görünmeyi yapılabilir giriş yapmayan kullanıcılar

Ben sadece belli bir kullanıcı/grup tarafından izlenebilir içeriğe sahip edebilmek isteyen bir müşteri var, ama yapmadınız zaman bir menü veya arama görünecektir.

neler olur Bu işlevselliği elde etmek için en iyi yaklaşım olmak mı?

+0

'Özel' içerik menülere ve aramalara bağlı mı? Öyleyse, anonim kullanıcılar bu bağlantıları ziyaret ettiğinde ne olur? –

+0

'özel' içerik yalnızca yöneticilere veya atanan kullanıcılara veya gruplara gösterilir. Anonim bir kullanıcı bir bağlantıyı ziyaret ederse, beklendiği gibi giriş sayfasına yönlendirir.Amacım, menüde ve aramada görünen içeriğe sahip olmanın bir yolunu bulmaktır, ancak sayfa veya klasör ziyaret edildiğinde giriş yapmak için yeniden yönlendirir. –

cevap

7

Aşağıdaki gibi iş akışını özelleştirmek gerekir: portal_workflow

  • yönettiği "Fragman" diyelim, yeni bir devlet oluşturma (bu isteğe bağlıdır, özelleştirmek olabilir> Zope Yönetimi Arayüzü- gitmek

    • bunun yerine mevcut bir durum ... belki de özel durum, belirli kullanıcılar/gruplar için kısıtlamalar ile başa çıkmak için iyi bir seçenek olabilir)
    • Tüm izinleri kaldırın, ancak bu özel durumdaki Anonim kullanıcıdan "Içerik bilgilerine erişin"
    • "Güncelleme güvenliği s "Düğmeler" düğmesi

    Bitti! Artık "Trailer" durumundaki tüm içerikler aranabilir, ancak anonim kullanıcılar tarafından görüntülenemez.

    Not: Yeni bir durum oluşturmayı seçerseniz, önereceğimiz gibi, gerekli tüm geçişleri de eklediğinizden emin olun.

    Düzenleme:

    Ne yazık ki son plone en sürümlerinde, bu eskiden olduğu gibi çalışmaya yukarıdaki işlemi engelleyen portal_catalog (allowedRolesAndUsers) yeni bir indeks var olduğunu farkında değildi. Yukarıdaki işlem doğrudur, ancak varsayılan dizinleyiciyi geçersiz kılmanız gerekir. "Plone" şablonunu kullanarak İlk create a new package with paster.

    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()) 
    

    ve daha sonra aynı seviyede bu içeren bir dosyayı overrides.zcml ekleyin::

    <configure xmlns="http://namespaces.zope.org/zope"> 
    
        <adapter factory=".indexers.allowedRolesAndUsers" name="allowedRolesAndUsers" /> 
    
    </configure> 
    
    Sonra (örn my.package/benim/paket) bir dosya ile bu indexers.py denilen paketin ana düzeyde eklemek sonunda

    ürününüzün ağaç gibi görünmelidir:

    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 
    

    son şey, kendi buildout.cfg yeni oluşturulan yumurta dahil etmek gerekir:

    eggs = 
         my.package 
    
    develop = 
         src/my.package 
    

    Bu işlemi durdurun. Bu kadar.

  • +0

    Plone 4.1.2'yi çalıştırıyorum ve 'İçerik bilgileri bilgilerine' menüde veya aramada görüntülenen bir öğe üzerinde hiçbir etkisi yok gibi görünüyor. Yalnızca 'Görünüm' iznini kontrol ettiğimde menüde veya arama sonuçlarında görünür. Özel durumu değiştirmenin yanı sıra, özel durumu değiştirmeyi ve anonim kullanıcılar için 'İçeriğe erişim bilgisini' kontrol etmeyi denedim –

    +0

    Bu gerçeği göz ardı edin: Her zaman 'İçerik' bilgisini 'Görünüm' konfigürasyonunda tutmanız gerekir, çünkü Giacomo dediği gibi. Onları benzersiz bir izin olarak düşünün! –

    +0

    @keul, Görünüm'ün kontrol edilmesi gerektiğini söylediğiniz gibi geliyor. Eğer söyledikleriniz buysa, o zaman bu, belirtilen hedefe ulaşmayan, yayınlandığı gibi aynı türden bir devlet yaratır. Seni tamamen yanlış anlatabilmem mümkün. –