2013-10-04 46 views
1

我试图将我的自定义api连接到在plone网站上使用pmr2.oauth提供程序并使用oauthV1的plone网站。从请求临时密钥到接收oauth访问令牌都一切顺利。从pmr2-oauth(plone包中)进入内容类型范围mangager的内容

但是,当我尝试访问资源时,我得到一个无效的范围。我已被告知要在pmr2.oauth包中填写内容类型作用域管理器,我必须将以下每个门户类型的映射填充到允许的子路径列表中:Plone站点,集合,文件,文件夹,管理器文件夹,页面,页面和子网站。

但我不知道在这里填写什么,所以我希望也许你们可以帮助我。

回答

1

包拥有者在这里,首先我必须道歉,并说我可以更好地证明这一点(确定它通过doctests记录,但它可以做得更好)!

您需要填写的内容是您希望访问该特定内容类型的视图。例如,如果您希望显示集合中所有项目的列表,则可以确定该视图的名称(在本例中为atct_topic_view)。对于标准页面,它将是document_view。也就是说,OAuth通常针对通常以更简洁的格式(例如json)进行通信的Web服务,因此开发人员可以开发特定于某些现有(或自定义)Plone内容类型的新视图,然后将这些视图添加到映射可用。

最后,映射基本上是端点,再加上一个可选的子路径,它可以是通配符。在编写时,为自定义子路径指定通配符并不意味着可以使用根父视图,因此,假设您有一个自定义下载视图,可让用户列出链接到实际内容中的子路径的格式,您可以执行一些操作像这样:

Collection: 

download_feed 
download_feed/* 

是否会让现有的download_feed查看集合内容类型中,然后内的所有子路径(一般通过自定义视图实现zope.publisher.interfaces.IPublishTraverse提供)。

或者,您可以编写自己的ScopeManager。只需创建一个从pmr2.oauth.scope.BaseScopeManager(或BTreeScopeManager)继承一个类中,实现所有的方法(和测试),然后你的代码内或与这样的ZCML注册这个:

<adapter 
    for="zope.annotation.interfaces.IAnnotatable 
     your.app.interfaces.IAppLayer" 
    factory="your.app.ScopeManager" 
    provides="pmr2.oauth.interfaces.IScopeManager" 
    /> 

应然后使用您自己的覆盖默认(Portal)基于内容类型的范围管理器。