Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
生徒
「Railsで、使っていい画面とダメな画面を分ける方法ってありますか?」
先生
「あります。Railsでは“認可”という仕組みを使って、操作できるかどうかを決めます」
生徒
「認可って難しそうです……」
先生
「CanCanCanを使えば、ルールを日本語感覚で書けるので安心ですよ」
1. Railsの認可とは?CanCanCanの役割
Railsの認可とは、「このユーザーは、この操作をしてよいか」を判断する仕組みです。たとえば、他人の記事を勝手に削除できないようにする、管理者だけが管理画面に入れるようにする、といった制御が該当します。
CanCanCanは、Railsでよく使われる認可用のGemです。Gemとは、Railsに機能を追加する部品のようなものです。CanCanCanを使うと、権限ルールを一か所にまとめて管理できます。
2. CanCanCanの基本構成とability.rb
CanCanCanでは、認可ルールをability.rbというファイルに書きます。このファイルは「誰が、何を、どこまでできるか」を定義する設計図です。
たとえば、ゲームセンターの受付表のように、「この人はここまで遊んでいい」と決めているイメージです。
# app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
end
end
3. ability.rbで権限を定義する方法
ability.rbでは、canとcannotを使って権限を設定します。canは「できる」、cannotは「できない」という意味です。
英語が苦手でも、「can = できる」と覚えれば十分です。
can :read, Article
can :create, Article
これは「Article(記事)を読むことと、新しく作ることはできる」という意味になります。
4. 条件付き認可の書き方(自分のデータだけ操作)
CanCanCanの強みは、条件付きの認可が簡単な点です。たとえば「自分が書いた記事だけ編集できる」というルールも、シンプルに書けます。
can :update, Article, user_id: user.id
can :destroy, Article, user_id: user.id
これは「記事のuser_idがログイン中のユーザーと同じなら、編集と削除ができる」という意味です。
5. load_and_authorize_resourceの基本
load_and_authorize_resourceは、コントローラで使う便利な機能です。これを使うと、データの取得と認可チェックを自動で行ってくれます。
毎回「取得して、確認して……」と書かなくて済むので、初心者にも優しい仕組みです。
class ArticlesController < ApplicationController
load_and_authorize_resource
end
6. load_and_authorize_resourceの実際の動き
この一行があるだけで、以下のことが自動で行われます。
- Articleを自動で取得
- ability.rbのルールを確認
- 権限がなければエラー表示
def show
# @article は自動でセットされる
end
7. 権限がない場合のエラー処理
許可されていない操作をすると、CanCan::AccessDeniedというエラーが発生します。これは「立ち入り禁止です」と言われる状態です。
rescue_from CanCan::AccessDenied do
redirect_to root_path
end
これにより、危険な操作からアプリを守れます。
8. CanCanCanを使うメリットと初心者向けポイント
CanCanCanは、認可のルールが一か所にまとまるため、後から見直しやすいのが特徴です。
「この人は何ができるんだっけ?」と迷ったときも、ability.rbを見ればすぐ分かります。初心者でも管理しやすい設計です。