如何为匿名用户而非登录用户授予字段的写入权限



在我的dexterity form中,我有一个字段"author"anonymous填写,但没有logged-in user

我定义了一个名为"isAnonymous"的权限,并将"isAnonymous"授予匿名用户

我这样使用dexterity.write_permission(author='isAnonymous'),

dexterity.write_permission(author='isAnonymous')
author=schema.TextLine(
    title=_(u'Author'),
)

但是,这种方法失败了,即使是logged-in user也能看到这个字段。

在本页

http://docs.plone.org/develop/plone/security/standard_permissions.html

注意:

如果向"匿名者"授予了权限,则该权限实际上被授予每个人无法向未登录的用户授予权限用户,而不将其授予已登录的用户。

那么,有什么建议吗?

Afaik您无法解决安全系统的问题。但您可以自定义Dexterity添加/编辑表单

然后你就有了全部的力量:-),你可以实现一个条件,它显示你的领域与否。

Dexterity表单基于z3c.forms和,因此它们具有几个方法,您可以覆盖这些方法(超级调用并完成您的工作)。

在您的情况下,代码可能如下所示。

...
# I would recommend to use the `updateWidgets` method.
def updateWidgets(self):
    super(CustomAddEditView, self).updateWidgets()
    from plone import api
    if not api.user.is_anonymous():
        from z3c.form.interfaces import HIDDEN_MODE
        self.widgets['author'].mode = HIDDEN_MODE

...

更多关于在z3c.form Docu中隐藏字段的信息。

最新更新