Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Djangoで組織とユーザーの権限管理をやってみよう #devio2022

Fe8025d56f2bf17204e3aa7598a96fe2?s=47 seiichi
July 30, 2022

Djangoで組織とユーザーの権限管理をやってみよう #devio2022

最近ひょんなことからDjangoでWebアプリケーション開発を始めたのですが、組織とユーザーの権限管理の実装でハマるポイントが多かったので紹介させていただきます。

※2022年7月19日〜29日開催の技術カンファレンス「DevelopersIO 2022」のセッション動画での資料です。

youtube: https://youtu.be/7zQdngoCysw
github: https://github.com/seiichi1101/devio2022

Fe8025d56f2bf17204e3aa7598a96fe2?s=128

seiichi

July 30, 2022
Tweet

More Decks by seiichi

Other Decks in Technology

Transcript

  1. Djangoで組織とユーザーの権限管理 をやってみよう CX事業本部 新井 成一

  2. 2 自己紹介 クラスメソッド株式会社 バックエンドエンジニア Python歴: 5年ぐらい Django歴: 3ヵ月ぐらい

  3. 3 なぜこのテーマか? 「組織とユーザーの権限管理」において そもそもDjangoの組み込みモデルを 利用・拡張するべきか?という考慮が必要 日本語の情報が少ない ハマるポイントおおい

  4. 4 やりたいこと Organization A Admin Editor Viewer Organization B Admin

    Editor Viewer Alice Bob
  5. 5 やりたいこと ユーザーの登録ができる 組織の登録ができる ユーザーは複数の組織に所属することができる ユーザーは所属する組織毎に権限を与えられる 権限は Admin、Editor、Viewer のいずれかとする 権限に応じたアクセス制御が可能とする

  6. 6 ERD

  7. 7 Index セットアップ ユーザーと組織の権限管理について ユーザーと組織の実装 権限の実装

  8. 8 セットアップ

  9. 9 期待するイメージ 1. ユーザーがログイン後に自分のユーザー情報が確認で きる

  10. 10 初期設定 # Python Version $python --version Python 3.9.6 #

    Install Django $python -m pip install Django $python -m django --version 3.2.13 # Create Django Project $django-admin startproject devio2022
  11. 11

  12. 12 GitHubの対象ブランチを参考 https://github.com/seiichi1101/devio2022/tre e/setup

  13. 13 ユーザーと組織の 権限管理について

  14. 14 アプローチ - モデル設計 1. 組み込みのGroupとPermissionsを利用する方法 テーブル数やコード量が増えず簡潔 Djangoが想定している以上の使い方ができない 2. 3rd

    Partyのライブラリを利用する方法 組織管理者の作成や組織への招待など多機能 必要以上の機能があることで混乱したり拡張が難しい 3. 自分で必要なモデルと機能を実装する方法 必要十分な機能を自分で実装でき拡張性が高い コード量・テーブル数が増え複雑さ・管理コストが増える
  15. 15 アプローチ - 権限管理ライブラリ 1. django-guardian 2. django-role-permissions 既存のPermissionsモデルを拡張して使う インスタンスレベルでのアクセス制御ができる

    汎用的な権限のまとまりを設定することは難しい 3. django-rules 権限管理にデータベースモデルを使用しない コードベースでアクセス制御ができるためカスタマイズしやすい 汎用的な権限のまとまりを設定することもできる アクセス制御のロジックを実装するため多少コード量は増える
  16. 16 ユーザーと組織の実装

  17. 17 実装方針 Organizationが複数のRole Groupを持ち、Role Groupに複 数のUserが所属するよう実装します

  18. 18 期待するイメージ 1. ユーザーがログイン後に自分のユーザー情報が確認 できる 2. ユーザーがログイン後に自分が所属する組織の情報 が確認できる

  19. 19

  20. 20 GitHubの対象ブランチを参考 https://github.com/seiichi1101/devio2022/tre e/user_org_impl

  21. 21 権限の実装

  22. 22 実装方針 各Role Groupに必要なRoleを設定し、Roleの種類に応じ たアクセスコントロールを実装します

  23. 23 期待するイメージ 1. ユーザーがログイン後に自分のユーザー情報が確認 できる 2. ユーザーがログイン後に自分が所属する組織の情報 が確認できる 3. ユーザーは自分が所属する組織のページへのみ遷移

    できる 4. ユーザーは権限のない操作はできない
  24. 24

  25. 25 GitHubの対象ブランチを参考 https://github.com/seiichi1101/devio2022/tre e/role_impl_1 https://github.com/seiichi1101/devio2022/tre e/role_impl_2

  26. None