TYPO3 v10.4 PageTS如何判断新建页面以实现指定用户组字段只读控制
问题根源
你当前配置不生效的核心原因是:新建页面时,PageTS条件中的page对象指向的是待创建页面的父页面,而非还未生成的新页面本身,因此page["uid"] != 0的判断永远为真(父页面必然有有效uid),会错误触发只读规则。
修复方案
要判断当前是否为新建页面场景,直接读取后端请求的编辑参数即可:TYPO3后端新建页面时,请求参数中会携带edit[pages][NEW]标识,我们在条件中排除该场景即可。
正确的PageTS配置如下:
[usergroup("3") && !array_key_exists('NEW', (request.getQueryParams()['edit']['pages'] ?? [])) && !array_key_exists('NEW', (request.getParsedBody()['edit']['pages'] ?? [])) && page["perms_userid"] != backend.user.userId] TCEFORM.pages { title.config.readOnly = 1 nav_title.config.readOnly = 1 hidden.config.readOnly = 1 nav_hide.config.readOnly = 1 } [end]
配置说明
- 同时判断GET参数和POST参数,覆盖所有新建页面的触发场景(包括从侧边栏新建、父页右键新建等入口)
- 仅当编辑已存在页面、且当前用户不是页面所有者时,才会触发只读规则
- 新建页面、编辑自有页面场景下,所有字段都保持可编辑状态,完全符合需求
可选扩展
如果需要支持复制页面时也保持字段可编辑,可在条件中额外加排除复制参数的规则:&& !(array_key_exists('cmd', request.getQueryParams()) && array_key_exists('copy', request.getQueryParams()['cmd']['pages'] ?? []))
内容的提问来源于stack exchange,提问作者klawipo
相关产品推荐
相关产品推荐

