2sxc v13中Staff角色用户如何查看自有未发布草稿条目?
问题根因
2sxc v13.x 版本数据访问层内置权限过滤规则:非编辑/管理员权限用户直接调用App.Data["内容类型名"]取数时,返回结果会自动剔除所有草稿状态(IsPublished=false)的条目。该过滤发生在数据加载阶段,后续在已返回的结果集上追加Where条件,无法拿到被提前过滤的草稿数据。
此前调整Create Draft/Edit Draft CRUD权限无效,是因为这两个权限仅控制用户创建、编辑草稿的操作权限,不覆盖草稿的列表可见性。给页面分配编辑权限后可看到草稿,是因为编辑权限默认绕过所有草稿过滤规则,但该权限开放范围过大,不符合最小权限安全要求。
解决方案
按以下步骤配置即可,无需给Staff角色分配页面编辑权限:
- 配置内容类型权限
进入2sxc应用管理后台,找到Items内容类型的权限设置页,给Staff角色单独勾选**查看自有草稿(View Own Drafts)**权限后保存。 - 替换列表取数逻辑
替换原有直接读取App.Data["Items"]的代码,调用支持显式加载可见草稿的API,同时通过过滤条件只保留已发布公开条目+当前用户自有草稿,参考代码如下:
@{ // 取数时显式指定加载当前用户有权限查看的草稿 var rawItems = AsList(App.Data.GetStream("Items", null, includeDrafts: true)); // 过滤规则:所有已发布条目 + 当前登录用户自己创建的草稿 var items = rawItems .Where(i => i.IsPublished || i.OwnerId == Dnn.User.UserID) .ToList(); }
- 校验配置&清理缓存
- 提交一条新草稿,检查条目
OwnerId字段值是否与当前登录Staff用户的ID一致,避免创建逻辑异常导致所有者ID匹配失败 - 清空2sxc应用缓存与DNN站点缓存,重新使用Staff账号访问页面即可看到自己提交的待审批草稿,且无法查看其他用户的草稿,完全匹配审批流程的业务要求。
- 提交一条新草稿,检查条目
补充说明
此前测试的GetDraft()方法不适用本场景,该方法仅用于获取当前处于编辑状态的单个条目的草稿版本,不支持批量查询草稿列表。
内容的提问来源于stack exchange,提问作者Jeremy Farrance
相关产品推荐
相关产品推荐

