後へ      Topへ      次へ

CanCanCan: ユーザー認可 (設定)

参考リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/fee9841

ability.rb

実際の認可の中身を設定します。
全ての設定は \app\models\ability.rb の initialize メソッド内に纏めて書きます。
引数に、操作しているユーザーのデータ (user) が渡ってきます。

user が、

実際に拒否された場合、例外が発生します。

例えば、
can [:show, :edit, :update], User, id: user.id
と書いた場合、
User の show, edit, update メソッドを対象に、
対象 User の id が、操作している user.id と一致する時だけ許可する、です。
つまり、自分自身のデータだけ、show, edit, update 可能。

なお、
設定は、上から順番に評価されて、
一番最後に有効な条件が採用されます。
よって、
最初に大枠を設定し、徐々に細かな設定を書いていくと良いでしょう。

application_controller.rb

\app\controllers\application_controller.rb で、
前コントローラ共通のコードを書きます。

認可が拒否された場合、
root_path (トップページ) に遷移してメッセージを出します。

rescue_from CanCan::AccessDenied do |exception|
  redirect_to root_path, alert: "権限がありません。", status: :see_other
end

rescue_from は Rails のメソッドで、
指定の例外(上記なら CanCan::AccessDenied) が発生した時に呼ばれます。

コントローラ毎の設定

\app\controllers 以下にある、各コントローラ毎のコードに、
load_and_authorize_resource を追記します。
このメソッドを宣言しているコントローラで、認可が行われます。

\app\controllers\application_controller.rb に
load_and_authorize_resource を書いて
全コントローラで認可を、としたい所ですが。
ログイン、ログアウトなど、
認可前に実行できないと困るものもあるので、
必要なコントローラ毎に設定しています。

 

flash 用 CSS

おまけですが。
本章で alert メッセージを出すようにしたので、
CSS を追加して、目立つようにしておきます。
\app\assets\stylesheets フォルダに CSS ファイルを置くだけで、
Rails が、全 View に適用してくれます。


後へ      Topへ      次へ