質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

448閲覧

Djangoで、組織ごとに複数のユーザーがいて、ユーザーが自分の組織のDBだけにアクセスさせたい。

Rio_acp

総合スコア4

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2022/09/20 06:52

前提

Djangoで、特定の組織ごとに複数のユーザーがいて、ユーザーは自分の組織のDBだけにアクセスできるようにしたいのですが、調べても方法がわからず困っています。
どう考えるべきかを教えていただけないでしょうか。

Django(というよりプログラム自体)初心者で、調べ方が良くないのかもしれませんが。。。

実現したいこと

1つのプロジェクトにA社・B社があり、それぞれにユーザーがいます。
イメージ説明

・ユーザー1と2は別々のアカウントでログインする。
・ユーザー1と2はA社のDB3とDB4にアクセスできる。

・B社についても同様に、ユーザー3と4は別々のアカウントでログインし、B社のDB5とDB6にアクセスできる。

・ユーザー1と2はB社のDB5とDB6にはアクセスできない。
・同様にユーザー3と4もA社のDB3とDB4にはアクセスできない。

試したこと

django管理者ページのgroupかと思いましたが、そういったものではないということだけ分かりました。

補足情報(FW/ツールのバージョンなど)

python 3.9
django 4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rio_acp

2022/09/22 05:31

仮に下図のような状況で、 https://onl.bz/jGjwJYp 1つのDBの情報を「ユーザー1と2はA社の情報だけ閲覧可能」、「ユーザー3と4はB社の情報だけ閲覧可能」という場合には、 ①アカウントを管理するDBでユーザー1と2にA社の組織IDを持たせる ②ユーザーの持っている組織IDを参照して閲覧できる情報を絞り込む ということを考えたのですが、他に良い方法があればご教授願います。
guest

回答1

0

ベストアンサー

これは設計の話だと思いますので、以下のような管理はいかがですか?
※どのように管理するかは設計者次第なので、やりたいことをそのままできるような仕組みは無いと思います。

  1. プロジェクト直下のDB0を追加する。
  2. DB0で組織(管理ユーザー、A社、B社)とユーザ(ユーザー1、2、3、4)と、そのユーザ(や組織)が使用可能なDB(DB1、2、3、4、5、6)の情報を管理する。
  3. DB0でユーザ認証を行い、認証できたら、そのユーザが使用可能なDBを使えるようなページに移動する。(このページは同一のサイトの中に作っても良いし、別サイトとしても良い)

投稿2022/09/21 00:54

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rio_acp

2022/09/22 05:31

ご回答ありがとうございます。 仕組み自体はないのですね。 管理方法に関しても理解しやすいです。 仮に下図のような状況で、 https://onl.bz/jGjwJYp 1つのDBの情報を「ユーザー1と2はA社ののユーザーが登録した情報だけ閲覧可能」、「ユーザー3と4はB社のユーザーが登録した情報だけ閲覧可能」としたい場合には、 ①アカウントを管理するDBでユーザー1と2にA社の組織IDを持たせる ②ユーザーの持っている組織IDを参照して閲覧できる情報を絞り込む ということを考えたのですが、他に良い方法はありますか?
FiroProchainezo

2022/09/22 15:07

私の回答「3」で、「ユーザが使用可能なDBを使える様なページ」に移動した場合、移動先でアクセスできるDBのデータは全て操作可能、と考えるような方法もあるかもしれません。 アプリ内で、全てのDBに接続した状態で、なにか色々条件分岐等を使って切り分けると、どこかでミスが起こる可能性があり、怖いです。 なので、どこかバランサーみたいなおもてのログインだけ、振り分けだけ担うサイト(窓口)があり、ログインしたらログイン情報込みで、専用サイト(A社用とか、B社用とか)に移動し、そちらで操作する、という形にしたら間違いも起こりにくいような気がします。 ただし、この組織やらユーザやらは最初に色々想定しておいた方が良いです。 組織A'は組織Aの下部組織として登録できる、とかになると複雑ですが、まずはどこまで許容(想定)されるのか考えてみてはいかがでしょうか? (こういうことをやり始めると、「A'はAの下部組織なので、AのDBにはアクセス出来ない」が、「AはA'のDB全てにアクセスできる」、みたいな考えも始まると思います。 当然、ユーザがいるので、AはA'のDBにアクセスできるが、アクセスできるのはAの管理者的な権限を持っているユーザだけとか、難しい事を考えに繋がるような気がします。 泥沼なので、ユーザとは誰か、組織とは何か、ユーザと組織の繋がりは何かを明確にした方が良いと思います。) サイトの分離や振り分け部分については、自前実装より、もしかしたらクラウドのサービスを使ったらスマートになる可能性があります。 サイトを分ける場合、ドメインを切り分けるのが楽そうなので、その辺柔軟にできるサービスを選ぶのも一案です。 ただ、書いていて思ったのですが、開発環境作るのがつらそうですね・・・。 開発環境もどのように構築するか考えておかないと、あとあと厳しくなりそうです。
Rio_acp

2022/09/25 22:35

ご回答ありがとうざいます。 確かに下部組織やさらにその下部なんてのも出てくると厄介ですね。 まだ知らない考え方が多くあり、非常に参考になりました。 もっと練ってから進めようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問