确认对作者限制站点设置的 API 访问权限

我正在开发一个集成,通过 API 发布并同步附属主题到 Discourse。为了进行设置诊断,我希望读取论坛当前的创作限制,以便集成在尝试创建或更新主题之前对内容进行预检。

我试图确认访问权限的设置包括:

min_topic_title_length
max_topic_title_length
min_first_post_length
min_post_length
max_post_length
max_tags_per_topic
max_tag_length
tagging_enabled
create_tag_allowed_groups
tag_topic_allowed_groups

我首先检查了 /site.json,它是可访问的,对于公开的功能提示很有用,但它似乎没有暴露这些具体的创作限制设置。

使用非管理员机器人用户的 API 密钥时,以下路径返回了 404

/site_settings.json
/admin/site_settings.json
/admin/site_settings

在将机器人用户设为管理员后,以下路径可以正常工作:

/admin/site_settings.json
/admin/site_settings

使用的请求头:

Accept: application/json
Api-Key: ...
Api-Username: discussbridge-bot
X-Requested-With: XMLHttpRequest

/site_settings.json 仍然返回 404

我的问题:

  1. /admin/site_settings.json 是否是读取当前站点设置的预期 API 路径?
  2. 是否需要管理员用户权限,还是有受支持的只读/细粒度 API 作用域用于此目的?
  3. /site_settings.json 是否已弃用、依赖于插件,或者预期不存在?
  4. 对于集成,推荐的模式是使用具有管理员权限的诊断/设置密钥来读取设置,同时使用权限较低的发布密钥来进行正常的主题/帖子同步工作吗?

目标不是通过 API 更改设置,而是在设置诊断期间仅读取它们,以便集成

  1. 它是 /admin/site_settings.json

  2. 你需要是管理员,除非是那些设置了 client: true 的选项,这些可以在 /site/settings.json 中找到

除了最后两项,你需要的所有设置都可以在 /site/settings.json 中找到。

但对于允许的组,机制有所不同:如果你以特定用户身份请求 /site.json,你可以检查 can_tag_topicscan_create_tags

  1. 据我所知,/site_settings.json 从未存在过。

  2. 我认为,针对你的具体用例,你可以使用普通用户并采用第 2 点中提到的方法。

感谢 @RGJ ,这正是我缺失的关键区分。

我针对我的论坛测试了这些路径,并确认:

/site/settings.json

/site.json

可以与我当前的全局/管理员机器人密钥配合使用。

/site/settings.json 暴露了我所需的数值创作限制,包括:

min_topic_title_length
max_topic_title_length
min_first_post_length
min_post_length
max_post_length
max_tags_per_topic
max_tag_length
tagging_enabled

/site.json,当以机器人用户身份请求时,会暴露:

can_tag_topics
can_create_tag

这似乎是设置诊断的正确模式。

一个后续问题:我还测试了一个针对主题/帖子/分类/标签发布工作范围的细粒度 API 密钥:

categories:list
categories:show
posts:edit
posts:list
search:show
tags:list
topics:write
topics:update
topics:read
topics:status

使用该细粒度密钥:

/t/{topic_id}.json 正常
/tags.json          正常
/categories.json    正常

但:

/site/settings.json  403
/site.json           403

我在管理界面中没有看到明显的细粒度范围,允许访问这两个站点级端点。

我是否遗漏了针对 /site/settings.json/site.json 的细粒度范围或允许 URL 配置?

由于这些密钥是为管理员机器人用户设计的,每个密钥在用户级别上都具备管理员权限。细粒度密钥仅限制它可以调用的 API 端点。

如果不是,我在测试期间的实际设置似乎是:

  1. 当前全局发布密钥
  2. 用于读取站点设置进行设置检查的全局诊断密钥
  3. 用于正常主题/帖子/标签同步的细粒度发布密钥候选

如果细粒度发布密钥被证明足以满足正常同步需求,原始全局发布密钥可以停用,留下:

  1. 用于运行时同步的细粒度发布密钥
  2. 用于设置检查的全局/管理员级诊断密钥

但这取决于细粒度密钥是否能覆盖所有正常发布操作,以及 /site/settings.json / /site.json 是否仍需保留在诊断侧。