3

これが私の問題です。私のサイトには、プロジェクトを作成し、他のユーザーのプロジェクトにアクセスできるユーザーがいます。各プロジェクトは、ユーザーに異なる権限を割り当てることができます。

したがって、プロジェクト A を持つことができます。ユーザー「John」はグループ「manager」にあり、プロジェクト「B」ユーザー「John」はグループ「worker」にあります。

Django ユーザー認証モデルを使用してそれを行うにはどうすればよいですか?

SQL の観点から、私が望むのは、「auth_user_groups」テーブルの主キーに「project_id」を追加できるようにすることです。

ここではプロフィールは役に立たないと思います。何かアドバイス ?

UPDATE : 「worker」と「manager」は、アプリケーションが定義する許可グループ (または「役割」) の 2 つの例にすぎません。将来的にはさらに増えるでしょう。例:おそらく「管理者」、「レポート」などもあるでしょう...

4

2 に答える 2

0

グループでこの情報が本当に必要な場合は、必要なモデルをサブクラス化し、これから独自の認証アプリケーション/認証バックエンドを作成するのが最善の解決策だと思います。

プロジェクトをグループに関連付ける必要があるかどうかはわかりません。ユーザーと1:1の関係を持ち、プロジェクトとam:nの関係を持つユーザープロファイルを作成して、プロジェクトをユーザーに割り当ててからチェックインすることもできます。アプリユーザーが関連しているプロジェクトは何ですか?

私の頭に浮かぶ3番目の解決策は、1つの外部キーをプロジェクトに、もう1つをグループ化するモデルを作成することです。これも機能する可能性がありますが、使い勝手が良くない可能性があります。

最も汚い方法は、おそらくモンキーパッチ(add_to_class)を使用してグループに外部キーを追加することですが、これは、別の降下方法が見つからず、どういうわけか最後の手段である場合にのみ推奨されると思いますが、最初の選択肢ではありません!

于 2010-06-04T13:59:37.237 に答える
0

User モデルでそれなしで生活でき、関連付けられたユーザープロファイルモデルを持つことができる場合は、次のようなものはどうですか:

from django.contrib.auth.models import User
from foo.models import Project

class UserProfile(models.Model):

  auth_user = models.ForeignKey('User')
  projects_where_manager   = models.ManyToManyField('Project', 
                                                     related_name="managers_for_project")
  projects_where_worker   = models.ManyToManyField('Project', 
                                                     related_name="workers_for_project")
于 2010-06-04T14:11:46.863 に答える