2

私はDjango1.3とPython2.6を使用してWebアプリに取り組んでいます。Djangoユーザーモデルを拡張して、3つのタイプのユーザーが存在し、各タイプのアクセス許可を管理する必要があります。

解明するために、ユーザーには、教員、TA、学生の3つのタイプがあるとします。TAは新しい「割り当て」を作成でき、教員は「レビュー」して確認できます。学生は「ソリューション」を送信します。これは、教員が「レビュー」する必要があり、TAは最終的に「レビュー済み」のソリューションをチェックできます。現在、ユーザーには3つのタイプがあります。TA■アサインメントを作成してソリューションを評価できるユーザー、Facultyアサインメントとソリューションを確認して確認できるユーザー、ソリューションをStudents送信できるユーザー。

これで、ユーザーモデルを拡張する方法が2つあることを理解しました。UserProfileを作成し、' user_type'というフィールドを追加できます。もう1つの方法は、ユーザーモデルをサブクラス化することです。サブクラス化は、ユーザーのタイプごとに異なるフィールドがあるため、より良いアプローチだと思います。

私は単一のログインフォームを使用しますが、ユーザーのタイプごとに異なる登録フォームを使用できます。なぜどちらかのアプローチを選ぶのですか?

さまざまなタイプのユーザーのアクセス許可を管理する最良の方法は、ユーザーグループを使用することであることを理解しています。グループを作成する方法、ユーザーがグループに属しているかどうかを確認しますか?ユーザーモデルを拡張する方法の選択は、アクセス許可の管理方法に影響しますか?

4

1 に答える 1

1

サブクラスを作成すると、メインクラスが自動的にインスタンス化されるため、より便利です。プロファイルクラスを作成する場合は、両方のクラスを手動でインスタンス化する必要があります。

単純なケースでは、アクションを許可する前にユーザータイプを確認する必要がある場合があります。Djangoの組み込みの権限バックエンドを使用できます。

サブクラス化するかプロファイルクラスを作成するかにかかわらず、グループのワークフローにはあまり影響しません。グループとユーザーの間には常にManyToManyの関係があります。ただし、たとえばUserProfileとGroupの間よりも、UserクラスとGroupクラスの間で作成する方が適切です。

より大きなプロジェクトを計画している場合は、権限フレームワークで定義する必要があるものについて簡単に説明します。

  • 件名(何かを作成、アクセス、または編集しようとしているユーザーまたはグループ)
  • オブジェクト(アクションのターゲット)
  • 所有者(オブジェクトの所有者)
  • ロール(サブジェクトとオブジェクトまたはオブジェクトの所有者との関係)
  • 権限(どの役割がどのアクションを実行できるかを定義するルール)
于 2011-11-01T08:08:57.770 に答える