标题说明了一切:在我们当前正在构建的网站中,我们拥有的页面具有对admin,guest和anon的权限。
我们创建的小部件之一允许管理员选择any页面,然后在页面中生成链接。使用apostrophe-second-chance-login,这应该可以正常工作。
[...]
{
label: 'Page, article, product, etc.',
help: 'Content to which the button leads',
name: '_target',
type: 'joinByOne',
withType: LinkableTypes,
filters: {
projection: {
_url: 1
}
},
idField: 'id'
}
[...]
LinkableTypes
只是链接可以指向的小部件名称的数组:
[
"apostrophe-page",
"article",
"machine",
"engine",
"accessory"
]
apostrophe-page
很明显,其他都是碎片。
我们遇到一个问题,即匿名模式下的小部件将无法获得data.widget._target._url
的任何值。
我们开始研究在load
中覆盖construct
方法
construct(self, options) {
const superLoad = self.load;
self.load = (req, widgets, callback) => {
superLoad(self.apos.tasks.getReq(), widgets, callback)
};
}
但似乎并非在所有情况下都有效。在非默认语言中,data.widget._target._url
为空,而在默认语言中为正确。我们使用apostrophe-workflow。
我试图避免创建将URL硬编码在其中的组件。
如果将permission: false
添加到联接的filters
部分,则将返回页面,而不考虑权限。您应该谨慎地使用它,但是它允许您创建到登录用户无法立即看到您正在寻找的页面的链接。