Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

6 ERD

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

8 セットアップ

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

14 アプローチ - モデル設計 1. 組み込みのGroupとPermissionsを利用する方法 テーブル数やコード量が増えず簡潔 Djangoが想定している以上の使い方ができない 2. 3rd Partyのライブラリを利用する方法 組織管理者の作成や組織への招待など多機能 必要以上の機能があることで混乱したり拡張が難しい 3. 自分で必要なモデルと機能を実装する方法 必要十分な機能を自分で実装でき拡張性が高い コード量・テーブル数が増え複雑さ・管理コストが増える

Slide 15

Slide 15 text

15 アプローチ - 権限管理ライブラリ 1. django-guardian 2. django-role-permissions 既存のPermissionsモデルを拡張して使う インスタンスレベルでのアクセス制御ができる 汎用的な権限のまとまりを設定することは難しい 3. django-rules 権限管理にデータベースモデルを使用しない コードベースでアクセス制御ができるためカスタマイズしやすい 汎用的な権限のまとまりを設定することもできる アクセス制御のロジックを実装するため多少コード量は増える

Slide 16

Slide 16 text

16 ユーザーと組織の実装

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 権限の実装

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

No content