3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsにおけるcancancan権限設定方法と使い方

Last updated at Posted at 2021-03-28

Railsのポートフォリを作成する時にcancancanというgemを使いましたが、参考になる記事が少なかったので備忘録をかねて記録を残します。

##初期設定(Gemのインストールとモデル作成)

初期設定(Gemのインストールとモデル作成)
gem 'cancancan' #Gemfileに設定する。

bundle install  #Gemをインストールする。

rails g cancan:ability #ターミナルに打ち込んでモデルを作成する。

すると
app/modelsability.rbが作成されます。

##権限の定義方法

本家のサイトにサンプル例が載っています。

権限は下記の5つがあり、主にCRUD関係の権限です。

基本の権限の理解

read: フロントのビュー画面表示

create: データの作成

uodate: データの更新

destroy: データの削除

manage: 全ての権限

書き方のイメージ

can 権限, モデル名

#または

cannnot 権限, モデル名

でモデルに権限を与えていきます。詳しくは下記を参考にしてください。

権限の定義の方法サンプル例

class Ability
  include CanCan::Ability
  def initialize(user)
    can :read, :all # ログインしていないユーザーも含め全てのユーザーへの権限を与える    
    if user.present?  # ログインしているユーザーに対して権限を与えるための条件分岐
      can :manage, Post, user_id: user.id 
      if user.admin?  # adminに対して権限を与えるための条件分岐
        can :manage, :all
      end
    end
  end
end

できる権利
できない権利
それぞれを上に重ねていって権限を与えていくイメージです。
下の階層に行けば行くほど、多くの権限が与えられる書き方になります。
となると、adminを全ての権限を持つので1番下にくる流れになることがわかります。
基本は、canで権限を与える。
managae権限や全ての権限対象allで与えすぎてしまって分はcannnotでマイナスするイメージです。
最後に適応された権限が有効になるようです。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?