2016-10-19 5 views
0

ユーザー、プロジェクト、メンバーシップがあり、各メンバシップにロールが指定されているとします(例:admin、read-only、userなど)。メンバーシップは、ユーザーとプロジェクト、および対応する役割の関係を定義します。Django:複雑なパーミッションモデル

Djangoの権限システムを使用して、管理者だけがプロジェクトを編集でき、他の役割がプロジェクトを編集できないようにするにはどうすれば問題がありますか?

プロジェクトリストのテンプレートは次のようになります。

{% for project in object_list %} 
    {# user.has_perm('edit_project', project) #} 
{% endfor %} 

これを行うための最善の方法は何ですか?メンバーシップの役割に基づいて権限を実装するにはどうすればよいですか?

答えて

1

独自の権限システムを構築する必要があります。

Djangoの組み込みパーミッションシステムは、あなたがしたいことには適していません。

Projectのビルドモデル。 UserProjectthroughMembershipモデルの間にManyToMany関係を作成します。このメンバーシップモデルのフィールドはroleです。

https://docs.djangoproject.com/en/1.10/topics/db/models/#extra-fields-on-many-to-many-relationshipsには、ほぼ理想的なニーズがあります。

user.has_perm('edit_project', project)をテンプレートに追加することはできません。 Djangoのテンプレートでは、複数のパラメータで直接関数呼び出しを行うことはできません。あなたのケースでは、Userインスタンス、Projectインスタンス、および希望する権限を記述する文字列を使用するカスタムテンプレートタグを使用するといいでしょう。

+0

あなたの答えをありがとう:-)それは今の魅力のように動作します。 –

関連する問題