经过很长一段时间我没有使用Plone,我又回来了.我们已经使用Plone 4.0.5建立了一个Intranet.我们已经将大量文档(主要是文件)上传到Intranet.
使用具有ZEO配置的Plone Unified Installer安装该站点.我们的buildout.cfg添加了一些产品(鸡蛋)(如果你需要buildout.cfg的一部分和/或versions.cfg;请问它)
ZEO服务器和客户端都在运行; 我正在做:
$ bin/client1 debug
Starting debugger (the name "app" is bound to the top-level Zope object)
... several warnings ...
>>>
Run Code Online (Sandbox Code Playgroud)
现在,我像这样查询目录:
>>> len(app.plone.portal_catalog(portal_type="File"))
17
Run Code Online (Sandbox Code Playgroud)
但是,如果转到ZMI并遍历portal_catalog/Indexes,转到portal_type并浏览,则"File"项目中包含更多元素.
这可能是因为我还没有登录:
>>> from Products.CMFCore.utils import _getAuthenticatedUser
>>> _getAuthenticatedUser(app.ca.portal_catalog)
<SpecialUser 'Anonymous User'>
Run Code Online (Sandbox Code Playgroud)
如何将控制台置于管理员用户的"上下文"中?
目录不会返回所有条目可能有以下几种原因:
他们的许可不允许你看到他们,完全停止.在这方面,使用匿名用户肯定没有帮助.:-)
参赛作品已过期; 他们的过期日期现在已经过去,您无权查看这些过期日期.同样,使用非特权用户也无济于事.
您正在使用多语言设置,而且这些项目不是"当前"语言.如果您的查询包含Language='all'此过滤器已禁用.
要Manager在控制台上设置备用用户(最好是具有该角色的用户),请使用以下代码:
from AccessControl.SecurityManagement import newSecurityManager
site = app['Plone'] # Adjust as needed
# Assuming your username is 'admin', adjust as needed again:
user = app.acl_users.getUser('admin').__of__(site.acl_users)
newSecurityManager(None, user)
Run Code Online (Sandbox Code Playgroud)
就个人而言,每当我使用控制台时,我都会使用以下代码段; 如果在我的Quicksilver Shelf中有这个,方便访问.首先我输入:
site_id = '<id of Plone site>' # Adjust as needed
Run Code Online (Sandbox Code Playgroud)
然后粘贴:
import transaction, pdb
from zope.interface import implementedBy
from zope.component import getUtility, queryUtility, queryAdapter
from Zope2 import debug
from Acquisition import aq_inner, aq_parent, aq_chain
from zope.app.component.hooks import setSite, getSiteManager
from Testing.makerequest import makerequest
from AccessControl.SecurityManagement import newSecurityManager, getSecurityManager
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
app = makerequest(app)
site = app[site_id]
setSite(site)
user = app.acl_users.getUser('admin').__of__(site.acl_users)
newSecurityManager(None, user)
Run Code Online (Sandbox Code Playgroud)
现在我有readline完成,我需要在我的网站上做一些真正的损坏!
小智 5
对于非常特殊的情况(例如迁移),您可以使用
results = catalog.unrestrictedSearchResults(...)
Run Code Online (Sandbox Code Playgroud)
这将返回所有结果而不进行过滤(绕过所有安全检查等)
然而,这种方法是官方的私人方法,并且如下所示:小心使用它.
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |