受限类别中的强制帖子

你好,

我正在通过 API 将 Discourse 用作社区后端。某些类别应限制普通用户创建主题或编辑主题标题的权限,但他们应能够查看帖子并回复。所有这些操作都应通过 API(使用管理员令牌)代表这些用户完成。我能否通过正确的安全和 API 调用来实现这一点?例如,如果我能以普通用户的名义(使用管理员密钥/用户)在受限类别中强制创建帖子就足够了,但我无法在 API 文档中找到这种情况。

非常感谢!

该 API 实际上不会针对您的用例提供文档,因为它完全不受支持(不过,我确实至少有一位客户正在做类似的事情)。如何逆向工程 Discourse API 可能是您能找到的最佳资源,此外还有 https://github.com/discourse/discourse/blob/master/config/routes.rb。

如果您使用的是管理员 API 密钥,那么所有限制都将被移除,因此您应该能够创建主题。或者,您可以先以普通用户身份创建主题,然后将其移动到那个您不希望他们能够发帖的分类中?

谢谢。我了解逆向工程,但 Discourse 前端没有类似的可拦截用例。我的意思是,即使我以管理员身份登录,也无法以其他用户身份创建主题。

目前我采用的变通方案是:将特定类别的权限设置为“所有人可查看/评论”,而管理员则拥有“查看/评论/创建”权限。这样,主题仅由“系统”创建(因此用户无法篡改标题),并附带一个模板化的原始帖子。然后,我可以使用 API 密钥在这些已创建的主题中以不同用户的身份发表评论。

我认为我之前帮助的那个小组,其用户是通过 SSO(也许是?)登录到 Discourse 的,因此他们是以自己的身份进行操作。这样就能获得 Rails 提供的所有用户保护机制。而使用单一的管理员 API 密钥来完成所有操作,似乎无异于埋下隐患。

不过,针对你当前面临的问题,我想你可以先以管理员身份创建主题,然后再更改其所有权。这应该相当直接。(当然,你还需要希望在整个事务开始到结束的期间内不会出任何差错。)

另一种可能性是创建一个自定义插件,添加一个“以用户身份创建”的路由(我尚未查看之前链接的路由,以确认是否已有此功能)。

但越想这个问题(当然,我对你的具体用途一无所知),我越觉得你应该让前端以用户身份登录,从而能够以该用户的身份与 API 进行交互。