コードとしてのアクセス制御リスト

Discourse Patreon のことは承知しています。私の質問は Patreon に関連していますが、「Patreon プラグイン」は求めている答えではありません。

Ruby クラスを拡張して、コード経由でアクセス制御リスト(ACL)を指定する良い方法はありますか?

例えば、特定のフォーラムへの投稿を Patreon メンバーのみに制限したり、特定の信頼レベルを持つユーザーのみが返信できるようにしたりしたいと考えています。ただし、これを GUI のトグルボックスとして実装したくはありません。Ruby でクラスを拡張し、コード経由でアクセス制御リストを指定できるようにしたいのです。

これは Discourse において容易に実現できることでしょうか、それとも難しいことでしょうか?

プラグインでは、やりたいことは何でもできます。

ただし、コード内でアクセス制御リスト(ACL)を管理することは推奨しません。確かに動作やルールを変更することは可能ですが、アクセス制御は管理者にとってできる限り透明で直感的であるべきではないでしょうか?また、緊急に変更を加える必要がある場合も出てくるでしょう。そのような変更をコードリリースに依存するのは避けたいはずです。

既存のモデルを十分に理解し、コード変更なしで必要なことを実現できないか検討してみてください。セキュリティは非常に重要でありながら扱いが難しい要素です。既存のフレームワークを活用すれば、Discourse チームがバックアップしてくれます。しかし、変更を加えてしまうとリスクが高まり、すべてを自分で責任を負うことになります。

また、プラグインの変更がコアの進化に対して堅牢である必要がある点にも留意してください。オーバーライドは、元のコードが変化しても引き続き動作する可能性が最も高いように記述する必要があります。これは微妙なバランスであり、保守コストの増加を意味します。プラグインが破綻することでインスタンスの更新ができなくなることは、それ自体がセキュリティリスクです。

結局のところ、プラグインはより表面的で害のない変更に対して特に適しています。セキュリティ層への適用は、慎重に検討した上で行うべきです。例外もあります。例えば、OAuth プラグインは、新しいプロバイダーを安全に追加できるプラットフォーム機能と連携して動作します。

以上を踏まえて、幸運を祈ります!

「いいね!」 1