環境(2016/5/19時点)
- Ruby 2.3.1
- Rails 5.0.0.rc1
- omniauth-google-oauth2 (0.4.0)
- banken (1.0.2)
- paper_trail (5.0.1)
Gem
omniauth-google-oauth2
Googleアカウントで認証できるやつです。
Googleアカウントを発行する組織は多いと思うので、使うと良いと思います。
メンバー管理もGoogleアカウントで管理すると楽そうです。
アクセス制限などをかけると思いますが、念のためアドレスのドメインも判定しておくと、プライベートGoogleアカウントを防げて良いと思います。
def email_check(email)
email.split('@', 2).last == 'hoge.co.jp'
end
banken
権限管理ができます。
Controller
の action
単位で権限が制御できるので便利です。 また、Rails4.1
から導入された Enum
を組み合わせるともっと便利です。
paper_trail
バージョン(モデルの変更)管理できます。
DBを操作するようなものを作るときは、履歴を残すことができるので便利かつ安全です。
最新のバージョンでは、デフォルトでは、 whodunnit
(モデル操作した current_user.id が入っていた)
の値は更新されなくなっていたので、使いたい場合は ApplicationController
に追記が必要です。
https://github.com/airblade/paper_trail/commit/3ce2b34b98345cad736f64a3a5e1374f40adc652
class ApplicationController
before_action :set_paper_trail_whodunnit
end
実装
current_user に気をつける
banken
も paper_trail
も ApplicationController
などに current_user
という名前でログインしているユーザを判定できるメソッドを定義しておく必要があります。もし、名前の違うものを使いたかったら、 alias_method
を使って current_user
を呼び出せるようにしておくと良いと思います。
# 通常は current_user でヨサソウ
def current_operator
@current_operator ||= Operator.find_by(id: session[:operator_id])
end
# View からも呼び出せるように
helper_method :current_operator
# 名前が違うときは current_user で呼び出せるように
alias_method :current_user, :current_operator
※ paper_trail
は、user_for_paper_trail
を上書きしてもヨサソウです。