Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[review] Blazer と GoodJob の追加認証 #40

Closed
wants to merge 8 commits into from

Conversation

morikiyo
Copy link
Contributor

@morikiyo morikiyo commented Feb 16, 2024

以下のメソッドを initializer や config/application.rb などで定義する

ActiveSupport.on_load(:action_controller_base) do
  def accessible_to_good_job?
    # e.g. メールドメインで判定する場合
    current_user&.email&.end_with?('@example.com')
  end
  
  def accessible_to_blazer?
    current_user&.admin?
  end
end

@morikiyo morikiyo changed the base branch from dev to main March 22, 2024 08:25
@morikiyo morikiyo changed the title [WIP] Blazer と GoodJob のコントローラに認証コールバックを差し込む [WIP] Blazer と GoodJob の追加認証 Mar 22, 2024
@morikiyo morikiyo changed the title [WIP] Blazer と GoodJob の追加認証 [review] Blazer と GoodJob の追加認証 Mar 22, 2024
@@ -24,6 +24,9 @@ class Railtie < ::Rails::Railtie
end

Blazer::Plus.blazer_danger_actionable_method ||= ->(blazer_user) { blazer_user.email.ends_with?('@sonicgarden.jp') }

# NOTE: すべての callback をすてているので致し方なく Blazer の用意している callback を利用する
Blazer.before_action = :authenticate_to_access_blazer!
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これ何のために必要なんだろう?
Blazer側で既に機能として用意しているのだから、必要なプロジェクトはちゃんとblazer公式ドキュメントに記載のあるそちらの機能を利用するほうがむしろ分かりやすいし保守しやすい気がしました。

さらにこのやり方だと強制的に一つだけ設定可能なBlazer.before_action設定が、暗黙的に使われてしまうことになるという点も将来トラブルポイントになりそうだなーと思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

blazer authenticate などの認証に不備があったとき(実装漏れなど)に、誰もアクセスできない状態にしておきたい、認証処理の実装に強制力をもたせておきたいというのが目的です

では、これがそれをできているかというと、完全ではないと思うのですが、ないよりはよいのかなというところ

なので、ここで認証したいわけではなく、認証が抜けた状態でリリースできない、などの仕組みでもよいかも
特定の CI を必須化してそこでテスト通過しないとリリースできないとか

一つだけ設定可能なBlazer.before_action設定が、暗黙的に使われてしまうことになるという点も将来トラブルポイントになりそうだなー

全くもって同意です、やりたくないですよね

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

blazer authenticate などの認証に不備があったとき(実装漏れなど)に、誰もアクセスできない状態にしておきたい

ちなみに実際にそういった問題がおきたということですか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題はおきてないけど、おきたときのインパクトがかなり大きいので、ガード強化しておきたいって思いがあります

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

実際に問題が起きたことあるなら、そのケースに対する対処方法ということで考えやすいかもですけど、認証といっても色々な方法で設定するやり方があるので、その全てが漏れていたケースを検知やガードしたいということだと難しいんじゃないかなーと思いました。
READMEにあるだけでも以下の3パターンがあるなと。

  • 環境変数によるベーシック認証
  • routes.rbによる制御
  • before_actionによる制御

https://github.com/ankane/blazer?tab=readme-ov-file#authentication


def authenticate_to_access_good_job!
return unless defined?(::GoodJob)
return unless self.class.module_parent == ::GoodJob
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good_job に関してもgem標準の機能で簡単に認証を追加出来るので、独自仕様の仕組みを追加するよりもgem標準で用意されている機能を用意するほうがメンテナブルだと思います。
標準で用意されている機能だけで不足があるのであれば、good_jobに関してはちゃんと目的伝えた上でPR送れば取り込んでくれる率も高いし、ピタゴラスイッチ的にモンキーパッチ当てていくより、普通にPR送るほうがいいんじゃないかとも思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらも目的は blazer と同様で、認証がなかったらアクセスできないようにで(リリースできないように)できればよいですね

適切な認証処理を実装することに強制力かチェックする仕組みがあればよいので
なにかよいアイデアがあれば是非 🙏

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good_jobに関しては、既にproxy経由以外はデフォルトでアクセス不可になっているので、そういった目的なら対応不要な気がする?

Copy link
Contributor Author

@morikiyo morikiyo Mar 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good_jobに関しては、既にproxy経由以外はデフォルトでアクセス不可になっている

そうですね good_jobに関しては、あったほうがよいけど、ここまでする必要はない気もします

@morikiyo
Copy link
Contributor Author

方針から再検討するため、一旦このPRはクローズします

@morikiyo morikiyo closed this May 16, 2024
@morikiyo morikiyo deleted the auth-blazer-goodjob-engine branch May 16, 2024 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants