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ả.
Nguồn
2012-03-12 17:22:24
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ư' –
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. –