Sitecore 9非管理员用户Publishing.CheckSecurity设为True时无法发布项
解决Sitecore 9中
Publishing.CheckSecurity=True时无法发布项的问题 我来帮你拆解这个问题的核心原因,以及你可能遗漏的关键配置:
问题根源
Sitecore 9在发布权限校验逻辑中新增了CanPublishLanguage方法(这是和8.1的核心差异),当Publishing.CheckSecurity=True时,系统会先校验用户是否拥有项对应语言的发布权限,再进行后续的项更新/删除权限校验。即使你给了项的全权限,如果语言层面的发布权限不满足,CanPublish方法会直接返回false,导致项被跳过发布。
你可能遗漏的配置检查点
- 确认语言项的
Publish权限:
进入/sitecore/system/Languages下对应的语言项(比如en),检查你的用户/角色是否被明确分配了Publish权限。注意:这里的权限是针对语言本身的项权限,不是项的语言版本权限,很多人会混淆这一点。 - 检查权限继承状态:
确保语言项的权限设置中没有禁用“继承权限”,如果继承被关闭,需要直接给用户/角色分配语言的Publish权限,不要依赖父级权限的传递。 - 查看发布日志的详细拒绝原因:
CanPublish方法中的explanation参数会记录具体的拒绝原因,你可以在Sitecore.log中搜索发布相关的日志(关键词:CanPublish、CanPublishLanguage),通过日志信息精准定位是语言权限缺失、目标数据库语言未启用还是其他问题。 - 验证用户的全局发布权限:
进入用户对应的角色权限设置,切换到“系统”标签,确认“发布项(Publish Item)”的全局权限已被勾选。这个全局权限是用户执行发布操作的基础,即使项和语言权限都满足,没有全局权限也会导致发布失败。 - 检查发布目标的语言匹配性:
确认发布目标(比如web数据库)的语言已启用,且与源数据库的语言一致。同时检查用户/角色对/sitecore/system/Publishing targets下的发布目标项拥有Read权限,没有这个权限会导致系统无法识别发布目标的配置。
调试小技巧
临时将Sitecore.config中的log4net日志级别调整为DEBUG,重新执行发布操作,日志会输出CanPublish方法每一步的校验结果,包括CanPublishLanguage的具体判断逻辑,能帮你快速定位问题所在。
内容的提问来源于stack exchange,提问作者harmanjot singh
相关产品推荐
相关产品推荐

