【Pundit】認証・認可とは
認証とは
相手が誰かを確認すること
例:
ログインするにはメールアドレスとパスワードを入力する事で、誰であるかを確認し(認証)、ログインできる。
認可とは
ある特定の条件に対して、リソースアクセスの権限を与えること
例:
記事の作成、更新→全員可能
ユーザーの管理(作成、更新)→admin(管理者)のみ
認可を設定するのに便利なGem
Railsでは認可を設定できる、便利なGemがいくつかあります。
特に有名なのが「Pundit」と「cancancan」というGemです。
Pundit
→リソースに対して、どのユーザーであれば処理が許可されるのかを定義するものです。
class ArticlePolicy < ApplicationPolicy def index? true #-> 全員が実行可能 end def show? true end def create? user.admin? || user.editor? # -> 管理者(admin)か編集者(editor)が実行可能 end def edit? true end def update? user.admin? || user.editor? end def destroy? user.admin? || user.editor? end end
cancancan
→cancanという有名な権限管理gemの後継。cancanの開発がストップしてしまったため、有志達によって、その後継であるcancancanが開発されているそうです。
考え方はPunditと逆で、各ユーザー毎に、どのような権限を持っているのかで権限を管理します。
class Ability include CanCan::Ability def initialize(user) if user.admin? #adminユーザーは全ての権限が与えられている can :manage, :all #[can? or cannot?] [:権限], [対象のオブジェクト] の形で権限設定を行う end if user.member? #memberユーザーは読み込みの権限が与えられている can :read, :all end end end
権限は基本的に以下の5種類です。
read: 読み込み, create: 新規作成, update: 更新, destroy: 削除, manage: 全て
■参考にした記事