私はこの種のもののためにdjango-guardian(https://github.com/lukaszb/django-guardian.git)が本当に好きです。Djangoにオブジェクトレベルの権限を提供します。
私があなたの特定の問題に取り組む方法は次のとおりです。
会社の所有者が実行できるアクションを定義します
class Meta:
permissions = [('can_add', 'Add product to company'), etc...]
次に、save()に追加して、新しい会社の作成時に会社ごとにグループを作成します。
def save():
# Create a permission group named %s_group % company_name
# assign(permission, group) - add the permissions to this group.
この時点で、例ではFoo_groupとBar_groupがあり、それらのオブジェクトのアクセス許可がグループに割り当てられています。
これで、あとは、さまざまな企業グループのユーザーを追加/削除して、それらのオブジェクトに関連付けられたアクセス許可を付与するだけです。
これの最後のコンポーネントは、関連するアクションで権限をチェックすることです。これは、各アクションの適切なビューで実行できます。追加、削除など。
パーミッションチェックにMixinsを使用するのは本当に素晴らしいので、クラスベースのビューが好きです。Guardianには、すぐに使用できるPermissionRequiredMixinが付属していますが、通常、より複雑な状況ではカスタムが機能します。