访问控制列表即代码

我知道 Discourse Patreon 。虽然我的问题涉及 Patreon,但“Patreon 插件”并不是我想要的答案。

有没有一种优雅的方式,通过代码扩展 Ruby 类来指定访问控制列表(ACL)?

例如:我希望确保只有 Patreon 会员才能在某个论坛发帖;只有达到特定信任级别的人才能回复,等等……但我不想通过 GUI 中的复选框来配置这些规则。我希望能够通过扩展某个 Ruby 类,并在代码中直接定义访问控制列表。

这在 Discourse 中实现起来是容易还是困难?

在插件中,你可以做任何你想做的事情。

不过,我不建议你在代码中管理访问控制列表。当然,你可以更改行为和规则,但访问控制应该尽可能对管理员透明且直观,对吧?此外,总会有需要紧急做出更改的时候。你肯定不想依赖代码发布来完成这些操作!

尝试充分理解现有模型,看看是否可以在不修改代码的情况下实现你的需求。安全是一个非常重要但棘手的要素,只要你利用现有的框架,Discourse 团队就会为你提供支持。如果你自行更改内容,风险会更大,且只能独自承担后果。

另外,请记住,你的插件更改需要能够适应核心功能的演进。重写(overrides)必须以某种方式编写,使其在原代码发生变化时仍最有可能继续正常工作。这是一个微妙的平衡,也意味着额外的维护开销。如果因为插件会导致崩溃而无法更新实例,这本身就是一个安全风险。

归根结底,插件特别适合用于一些表面、无害的更改,但将其应用于安全层之前,必须经过慎重考虑。当然也有例外,比如 OAuth 插件,它们利用平台功能,可以安全地接入新的提供商。

话虽如此,祝你好运!

1 个赞