2011-12-05 23 views
8

ユーザグループに基づいて権限をサポートするようにDjango Administrationをカスタマイズする方法を探しています。django admin - モデルを編集または表示するためのグループアクセス許可

たとえば、Developersグループを作成したばかりですが、今度はTicketsモデルを作成し、AdminModelを使用してデータをリストする方法を指定しました。

私は、このモデルを開発者だけが見えるようにしたいと思います。そして、このグループには含まれておらず、お互いに隠れています。 私は多くの文書を読んだことがありますが、実際にそれを動作させるために何をすべきかを理解し理解することはできませんでした。

セキュリティ上の理由から、特定のモデル(Developersグループ以外のユーザーには表示されていないモデル)のオブジェクトを追加/削除するときに、実行時にユーザーグループをチェックする必要があります。モデルを使用するURL:

単純なタスクのように見えますが、多分私は何かを見逃しています...サードパーティ製のミドルウェア、またはそれを行う方法?必要に応じて管理ビューを編集する準備もできていますが、何をするべきかを知る必要があります。 has_add_permissionhas_change_permissionhas_delete_permission

答えて

12

ModelAdminは、ユーザ権限を扱う3つのメソッドを持っている:-)ありがとうございます。 3つすべてがブール値(True/False)を返す必要があります。

class TicketAdmin(admin.ModelAdmin): 
    ... 
    def has_add_permission(self, request): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_change_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

    def has_delete_permission(self, request, obj=None): 
     return request.user.groups.filter(name='Developers').exists() 

Falseは、これらのいずれかから返されると、403でそれの結果禁止:

だからあなたのような何かを行うことができます。

+0

Cool!カスタムのアクセス権管理のための簡単な管理フックがあることを知らなかった! –

+0

うわー!これはとても簡単に実行できるようです:-) よく似た質問が分かりやすい解決策を得られませんでした。 ありがとうございます! –

+0

驚くべきことは、私が働いていることを正確に指摘しています –

関連する問題