後へ      Topへ      次へ

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

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

基本構造

 

ちなみに、
user&. の & は、Ruby の仕様で「ぼっち演算子」と言われます。
user.is_admin? としていて、user が nil だと NoMethodError になります。
& を付けておくと、
user&.is_admin? 全体で nil を返してくれます。
上記の例でいえば、
何らかの理由で user が定義されていない状態で認可チェックをした場合でも、
安全に nil → false 扱い → 認可拒否、になります。

 

デフォルト拒否

\app\policies\application_policy.rb で、
元々デフォルト全部拒否になっていますが、
多少書き換えておきます。
実際の内容は、リポジトリを参照してください。

拒否するリンクを隠す

前章の Cancancan では、
認可拒否になるリンクをクリックした場合は、
root_path (トップページ) に遷移してメッセージを出していました。
コードは、rescue_from 一つで済むので簡単ですが、
ユーザーの操作性は良くないです。

今回は、
拒否になるリンクが押せないよう、
状況に合わせて link_to や button_to 部分を隠すようにします。
View の各所で地道にコードを書かないといけない点が面倒ですが、
ユーザーの操作性は良くなるでしょう。

実際の内容は、リポジトリを参照してください。


後へ      Topへ      次へ