OSS探訪

Railsの認可ルールをAbilityへ集約し、コントローラー・ビュー・検索条件で同じ権限制御を再利用する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
5,681
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/09/08
ページ内ナビ

概要

CanCanCanはRubyとRuby on Rails向けの認可ライブラリです。ユーザーがどのresourceへどのactionを実行できるかをAbilityへ定義し、コントローラー、ビュー、database queryで同じruleを再利用できます。Rails向けhelperを使うとresourceの読み込みと認可もまとめられます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

認可ルールをAbilityへまとめて一元管理する

CanCan::AbilityをincludeしたAbility classへcan ruleを定義し、controllerやviewへ同じ条件を重複して書かずに権限判定を共有できます。

出典:[1]

can?とauthorize!で表示・処理の可否を確認する

viewやcontrollerではcan?・cannot?で判定でき、authorize!は許可されていないactionで例外を発生させます。

出典:[1]

accessible_byで閲覧可能なrecordだけを取得する

model queryにaccessible_by(current_ability)を適用し、Ability ruleに基づいて利用者がアクセスできるrecordへ結果を絞れます。

出典:[1]

向いている用途

Railsアプリの認可条件を画面・controller・queryで統一したい場合に向く

roleや所有者、resource属性に応じた認可を複数layerで同じruleから評価したいRails applicationに適します。

出典:[1]

導入前の確認

認証ではなく認可を担当するlibraryとして分離する

CanCanCanが扱うのはresourceへのpermissionです。loginやidentity verificationは別のauthentication機構で行い、認証結果をAbilityへ渡す構成にします。

出典:[1]

自動load/authorizeの挙動をcontrollerごとにtestする

load_and_authorize_resourceはRESTful controllerのresource読み込みと認可を自動化します。custom actionや複雑なassociationでは意図したrecordとruleが使われるかをtestで確認します。

出典:[1]

3.5.0のreleaseと継続中のdevelop branchを区別する

2026年10月3日時点のGitHub最新Releaseは3.5.0ですが、repositoryのdevelop branchにはその後のcommitがあります。production導入ではreleaseを固定し、未release変更を前提にしない運用にします。

出典:[3][4][2]

参考にした公式資料

  1. [1]CanCanCan 3.5.0 README(2026-10-03)
  2. [2]CanCanCan 3.5.0 gemspec(2026-10-03)
  3. [3]CanCanCan 3.5.0 release(2026-10-03)
  4. [4]CanCanCommunity/cancancan repository(2026-10-03)
  5. [5]CanCanCan MIT license(2026-10-03)
編集部からの補足

認証済みユーザーが「何をできるか」を一か所で管理したいRailsアプリに向きます。ルールを増やすほどAbilityの責務が膨らむため、domain単位の分割とauthorization testを早めに用意すると保守しやすくなります。

3ステップで試す

  1. 1

    CanCanCan 3.5.0をGemfileへ追加する

    Rails projectのGemfileへstable releaseを固定して追加し、bundle installを実行します。

    gem 'cancancan', '3.5.0'
  2. 2

    Ability classを生成する

    認可ruleを置くAbility classを生成します。

    bin/rails generate cancan:ability
  3. 3

    画面またはcontrollerでpermissionを確認する

    Abilityへcan :read, Post, ...等のruleを定義し、viewではcan?、controllerではauthorize!等で同じpermissionを利用します。

    can? :read, @post
公式READMEで確認

成長

成長の推移 · 直近30日

5,681 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
1
Open PR
31

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • authorization
  • cancancan
  • rails
Stars
5,681
Forks
630
Watchers
94
Open Issues
61
Contributors
199
所有者種別
Organization
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/09/08

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?