2016-05-04 7 views
0

Djangoでは、ユーザとグループのユーザにオブジェクトに対するカスタムパーミッションを与えることができます。(django-guardianはこれを使う良い方法を追加します)。ユーザーを階層化する方法はさまざまです。私がしたいのは、アクセス許可自体に2つのタイプの階層を追加することです。たとえば、ある人がBookオブジェクトに対して与えられた許可を持っている場合、私は彼らに暗黙のうちに各Pageオブジェクトに対してその許可を持たせたいと思う。また、誰かがPagechangeのアクセス権を持っている場合、暗黙のうちにそのPageviewのアクセス許可を持たせてもらいたいと思います。要するにDjangoのパーミッションの階層化 - モデルや他のパーミッションから継承

、私はpage.has_permission('view', user)page.has_permission('*edit*', user)page *.book* .has_permission('view', user)の両方をチェックし、book.has_permission('view', user)のために自分自身にbook.has_permission('*edit*', user)を確認したいです。

私はdjango-rulesのような複雑なものは必要ありません。私は大きな数値を持たないため、一般的な外部キー手法を好んでおり、モデル構造はきれいで集中しています。私は、ビュー内のこれらのパーミッション関係、または複雑なモデルのロジックを繰り返さないようにしたいと思います。理想的には宣言的に、どこかでこのパーミッション構造を集中管理するのが理想的です。例次に

perm_hierarchy = {'view': ['edit', 'delete', ]} 
model_perm_hierarchy = { Page : [Chapter, ], 
         Chapter : [Book, ]} 

そのPageオブジェクトに'edit''delete'パーミッションため'view'Pageにチェックするためのチェックこと層。

同様に、アクセス許可をPageにチェックするときは、同じアクセス許可(Chapterに対して同じ名前付きアクセス許可が定義されている)の場合はChapterをチェックします。

私はこの間違いを考えていると言われて非常に満足しています。

答えて

0

django-guardianの上にdjango-rulesを使用して解決策を文書化しました。this answer

関連する問題