0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

「認証」は、多くのRailsアプリケーションで、deviseが使用されているかと思います。
ただ、「認可」に関しては、皆さんどのように実装されていますでしょうか?

今回実装するにあたって、考えた方法を3つご紹介いたします。

「認証」と「認可」の違いに関しては、本記事では解説いたしません。
詳しくは、以下の記事が参考になりますので、ご覧ください。

3選の紹介

① Pundit ・ cancancan

上記2つとも、認可周りをサポートしてくれるgemです。
ライブラリを使用すると、実装が楽になるのはとても良いですね。

昔からあるイメージですが、直近(2024/07時点)も更新されているので、安心して使用できそうです。

② ymlで管理

ymlファイルを準備して、そこで権限を管理する方法です。
以下は一例になります。

default: &default
  writer:
    controllers:
      dashboard: 
        - index
        - new
        - create
  admin:
    controllers:
      users:
        - index
        - edit
        - update

development:
  <<: *default

役割(ロール)に対して、許可するコントローラーとアクションを記載します。
そうして、ApplicationControllerで、controller_nameaction_nameを受け取り、ymlファイルで許可しているかどうかを判断します。

最小限で始められるので、そこまで多く管理しない場合はオススメかと思います。
ただ、機能が多くなったり、権限も多くなってしまうと、ymlファイルでは管理が難しくなりそうです。

③ DBで管理

権限用のテーブルを用意して、データとして管理します。

- admin_usersテーブル
    - role_idを持って、アソシエーションを組む
- rolesテーブル
    - 役割をまとめる
- permissionsテーブル
    - controller_nameとaction_nameを整理する
- role_permissionsテーブル
    - 役割に対して、どのような権限を持たせるかまとめる

大体、上記のようになるかと思います。
これもcontroller_nameaction_nameを受け取り、許可されているかDBをみて判断する実装をします。

これのいいところは、管理画面に機能を作成すれば、リリース無しで権限の付与をすることができます。
DB管理のメリットではあるかと思います。

まとめ

以上、「認可」を実装する方法を3つまとめました。
そのアプリの規模感によっても、実装する方法は変わってくるかと思います。

個人的には、以下の感じに思っています。

  • ミニマムに始めるなら
    • ymlで管理
  • 今後しっかり管理していきたい
    • Pundit・cancancan
    • DBで管理

上記以外にも、実装する方法はたくさんあるかと思います。
今回はあくまでも例ですので、ご自身の実装しているシステムに合った、あるいはチームで相談の上、実装方針をすり合わせてください。

最後までご覧いただき、ありがとうございました。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?