2012-03-12 23 views
6

Trên một 4.x Plone cài đặt, có thể một trong haiPlone 4: Hạn chế xuất bản nội dung

  1. nội dung xuất bản được giới hạn cho một người dùng/nhóm nhất định hoặc
  2. nội dung riêng tư được thực hiện để hiển thị trong menu và tìm kiếm người dùng chưa đăng nhập?

Tôi có một khách hàng muốn để có thể có nội dung mà chỉ có thể được xem bởi một người dùng/nhóm nhất định, nhưng sẽ hiển thị trong một menu hoặc tìm kiếm khi chưa đăng nhập.

gì sẽ là cách tiếp cận tốt nhất để đạt được chức năng này?

+0

Nội dung 'riêng tư' có được liên kết trong menu và tìm kiếm không? Nếu có, điều gì xảy ra khi người dùng ẩn danh truy cập các liên kết này? Nội dung 'riêng tư' –

+0

chỉ hiển thị cho quản trị viên hoặc người dùng hoặc nhóm được chỉ định. Nếu một người dùng ẩn danh truy cập vào một liên kết, nó sẽ chuyển hướng đến trang đăng nhập như mong đợi.Mục tiêu của tôi là tìm cách để có nội dung hiển thị trong menu và tìm kiếm, nhưng chuyển hướng để đăng nhập khi trang hoặc thư mục được truy cập. –

Trả lời

7

Bạn sẽ phải tùy chỉnh công việc của bạn như sau:

  • đi đến Zope Management Interface-> portal_workflow
  • Tạo một trạng thái mới, chúng ta hãy nói "Trailer" (điều này là không bắt buộc, bạn có thể tùy chỉnh trạng thái hiện tại thay vào đó ... có thể trạng thái riêng tư sẽ là tùy chọn tốt để xử lý các hạn chế cho người dùng/nhóm cụ thể)
  • Xóa tất cả quyền nhưng "Truy cập thông tin nội dung" từ người dùng Ẩn danh ở trạng thái cụ thể đó
  • Đẩy "Cập nhật bảo mật ettings "button

Xong! Hiện tại, tất cả nội dung trong trạng thái "Đoạn giới thiệu" sẽ có thể tìm kiếm được nhưng không thể xem được bởi người dùng ẩn danh.

Lưu ý: nếu bạn chọn tạo trạng thái mới, như tôi đã đề xuất, hãy đảm bảo thêm tất cả chuyển tiếp cần thiết.

Sửa:

Đáng tiếc là tôi đã không biết rằng trong các phiên bản gần đây của Plone, có một chỉ số mới trong portal_catalog (allowedRolesAndUsers) có thể ngăn chặn quá trình ở trên để làm việc như trước kia nữa. Quá trình trên vẫn chính xác, mặc dù bạn sẽ cần phải ghi đè lên trình chỉ mục mặc định. Đầu tiên create a new package with paster bằng mẫu "dễ bị". Sau đó thêm vào các cấp chính của gói (ví dụ my.package/my/gói) một tập tin gọi indexers.py với điều này:

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

và sau đó trong cùng cấp thêm một tập tin overrides.zcml với điều này:

<configure xmlns="http://namespaces.zope.org/zope"> 

    <adapter factory=".indexers.allowedRolesAndUsers" name="allowedRolesAndUsers" /> 

</configure> 

cuối cùng cây của sản phẩm của bạn sẽ trông như thế này:

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 

điều cuối cùng, bạn cần bao gồm trứng vừa được tạo ra trong buildout.cfg của bạn:

01.
eggs = 
     my.package 

develop = 
     src/my.package 

Chạy lại. Đó là tất cả.

+0

Tôi đang chạy Plone 4.1.2 và 'Thông tin nội dung truy cập' dường như không có hiệu lực đối với một mục hiển thị trong menu hoặc tìm kiếm. Chỉ khi tôi kiểm tra quyền 'Xem', nó hiển thị trong menu hoặc kết quả tìm kiếm. Tôi đã thử một trạng thái tùy chỉnh cũng như sửa đổi trạng thái riêng và kiểm tra 'Truy cập thông tin nội dung' cho người dùng ẩn danh –

+0

Bỏ qua thực tế này: bạn luôn cần phải giữ 'Truy cập thông tin nội dung' trong cùng một cấu hình "Xem", như Giacomo nói. Hãy coi chúng như một sự cho phép duy nhất! –

+0

@keul có vẻ như bạn đang nói rằng Chế độ xem cần được kiểm tra. Nếu đó là những gì bạn đang nói, sau đó tạo ra cùng một loại trạng thái như được xuất bản, mà không hoàn thành mục tiêu đã nêu. Hoàn toàn có thể là tôi hiểu lầm bạn. –

Các vấn đề liên quan