2SXC-DNN配置:允许页面编辑者查看草稿/隐藏项
问题描述
- 需求:允许特定用户/用户组添加页面内容并查看隐藏项
- 现状:
- 原配置的「Editors」角色(含应用及内容类型CRUD权限)失效,非管理员用户的
Content变量为空,触发模板渲染错误 - 当前视图绑定单个未发布演示内容项,仅发布时编辑者可查看编辑;未发布时因
Content为空抛出Cannot perform runtime binding on a null reference错误 - 已尝试配置应用权限、内容类型权限均无效;2sxc 12.2.1版本中配置应用权限可实现需求,但15.6.0版本无效果
- 原配置的「Editors」角色(含应用及内容类型CRUD权限)失效,非管理员用户的
- 核心待解决问题:
- 配置权限,让有页面编辑权限的用户能查看未发布项
- 修改模板增加空值判断,避免空引用错误
- 确保未发布项对未认证/只读用户隐藏
解决方案
1. 适配2sxc 15.6.0的权限配置
- 进入2sxc应用管理后台,打开目标应用的「Permissions」设置
- 给「Editors」角色配置以下权限:
- 应用层面:勾选
View Drafts(查看草稿)、Edit Content(编辑内容)权限 - 内容类型层面:针对目标内容类型,勾选
View(包含草稿)、Edit权限
- 应用层面:勾选
- 补充页面权限配置:在Dnn页面设置中,确保「Editors」角色拥有
Edit Page权限;同时在2sxc视图设置里,开启「Allow Edit for Page Editors」选项 - 注意:2sxc 15+版本权限粒度更严格,需同时保证应用权限、内容类型权限、页面权限三者匹配,避免单一配置遗漏
2. 模板空值判断优化
以Razor模板为例,添加Content变量的空值校验逻辑:
@if(Content != null) { // 原内容渲染逻辑示例 <h1>@Content.Title</h1> <div>@Content.Description</div> } else { // 仅对编辑者显示友好提示,普通用户无输出 @if(User.IsInRole("Editors") || User.IsSuperUser) { <p>提示:当前无已发布内容,您可点击编辑按钮添加或编辑草稿</p> } }
核心逻辑:先判断Content是否为空,非空时才执行渲染;针对编辑者用户显示提示,普通用户无内容输出
3. 未发布内容的隐藏控制
- 依赖2sxc内置权限机制+模板逻辑实现:
- 未认证用户:
Content为空时不输出任何内容,且无编辑入口 - 只读用户:即使
Content为空,也不显示草稿内容或编辑提示
- 未认证用户:
- 额外验证:确保未发布内容的状态为「Draft」,2sxc默认会对未认证/只读用户隐藏草稿内容
内容的提问来源于stack exchange,提问作者M Vaz
相关产品推荐
相关产品推荐

