14

私は Django の詳細を約 1 週間調査してきましたが、私が見たものは気に入っています。ただし、CRUD インターフェイスへのアクセス許可のきめ細かな制御に関しては、否定的な意見もあります。

私が書いているのは、イントラネット クライアント管理 Web アプリです。組織は約 6 層であり、層に基づいてクライアント グループへのアクセスを制限する必要があります。続々拡大中。これを行う方法についてはかなり良い考えがありますが、事前に構築された管理インターフェイスにうまく統合できるかどうかはわかりません.

私は Django の開発を全く行っていません。生成された管理インターフェイスがこのプロジェクトにとって役に立たない場合は、おそらく Django を使用しませんが、前述したように、きめの細かいカスタム権限に大きく依存しています。

Django では、カスタムのパーミッション/ルールを作成して、それをシームレスに管理 CRUD インターフェイスに統合できますか?

更新 1: 管理アプリを使用して、CRUD インターフェイスの生成の繰り返しを最小限に抑えたいので、必須だと思います。

更新 2:

このプロジェクトに必要な権限について説明したいと思います。

クライアントは、1 つまたは複数の「ストア」に属することができます。フルタイムの従業員は、自分の店舗のクライアントのみを編集できるようにする必要があります (別の店舗に属していても)。ただし、別の店舗のクライアントを表示/編集することはできません。カジュアルは、登録されている店舗に基づいてのみクライアントを表示できるようにする必要があります (または、カジュアルが店舗ユーザーとしてログインしている場合 - より可能性が高い)。

その上の管理者は、管理する店舗のすべての従業員を確認できる必要があります。

上級管理職は、すべての従業員を編集し、自分自身の下に権限を付与できる必要があります。

djangoのドキュメントを読んだ後、グループのサブセットの権限を(自動的に)設定できないと書かれています。グループ全体のみ。この目的のために独自のアクセス許可をモックアップするのは簡単ですか?

4

6 に答える 6

8

更新された要件を正しく読んだ場合、Djangoの既存の認証システムでは十分ではないと思います。フルオンのACLシステムが必要なようです。

このテーマは何度も出てきました。django+aclでグーグルしてみてください。

ランダムサンプリング..。

数年前にSummerofCodeプロジェクトがありましたが、どこにたどり着いたのかわかりません。http://code.djangoproject.com/wiki/GenericAuthorizationを参照してください

djngoproject.orgには、興味深いかもしれない新しいチケットがあります。

dumpz.orgにはいくつかの興味深いコードスニップがあります。

...しかし、ドキュメントはありません。

幸運を!

于 2008-10-25T23:49:42.063 に答える
4

Django パーミッション システムは完全にルール化されています。各モデルには、既定の権限セットがあります。モデルに新しい権限を追加することもできます。

各ユーザーには、一連の権限とグループ メンバーシップがあります。個々のユーザーは個別の権限を持つことができます。また、グループ メンバーシップからアクセス許可を継承します。

ビュー関数 (およびテンプレート) を使用すると、使用する必要がある任意のレベルの粒度で、これらのアクセス許可の有無を簡単に確認できます。

これでは不十分な場合は、プロファイル アドオンを使用すると、「ユーザー」とその機能、権限、役割、責任などを定義するためのさらに多くのオプションが提供されます。

これで十分でない場合は、独自の認証方式を定義できます。


重要なのは、ユーザーの実際のサブセットであるグループを定義しようと試みたり、定義たりしないことです。「グループのサブセットに権限を設定する」必要はありません。より小さなグループを持つ必要があります。人々のサブセットを中心に定義されたグループ。

Django のデフォルトの権限は、モデル内の行アクセスではなく、モデル アクセスに関するものです。一方、問題は、クライアント、ストア、従業員、マネージャーなど、いくつかのモデルの行のサブセットに関するものです。

これらのアイテムの中の FK の基本セットと、行をサブセット化するためのいくつかのフィルターが必要です。デフォルトの管理ページではこれを行うのに問題があるかもしれません。特殊なフィルターを使用するには、独自のバージョンの admin が必要になる場合があります。


Django パーミッション システムでそれができない場合は、ユース ケースを再考する必要があります。真剣に。

[ただし、Django-REST インターフェースはまったく別の獣であり、注意と栄養が必要です。]

于 2008-10-24T01:58:34.120 に答える
3

ModelAdminオブジェクトにはhas_add_permission、、、およびメソッドがありhas_change_permission、ログインしたユーザーが表示および変更できるものにアクセス許可を適用できます。これらを使用して、実装するアクセス許可を適用し、すべてのモデルをアプリケーションに登録するサブクラスを作成できます。サブクラスを使用します。has_delete_permissionquerysetadmin

ただし、それはすべて、アクセス許可システムがどの程度正確に機能するかによって異なります。きめ細かいアクセス許可から外れる正確な要件は何ですか。アプリケーションの設計から離れるほどadmin、より多くの作業が必要になりますが、カスタム要件を実装するために使用できるフックがたくさんあります。これはLukePlantのブログ投稿で、深く掘り下げることなく実行できる微調整の例を示しています。

adminそれは絶対にアプリケーションに基づいている必要がありますか?ジェネリックビューModelFormsは、CRUDの実装に伴う面倒な作業の多くを処理できるため、カスタマイズに夢中になりすぎないように注意しadminてください。アプリに夢中になることから始めるのは、ほとんどDjangoの伝統であり、adminアプリでできることとできることは何ですか。そうしないでください。最初は、コードを二度と書く必要はないと考えています;)

于 2008-10-24T00:06:33.113 に答える
2

django 1.2 から、 django-guardianを使用すると非常に直感的に処理できる行レベルのアクセス許可がサポートされます。

于 2011-08-10T08:44:23.507 に答える
0

また、granular-permissionsモンキーパッチもご覧ください: http ://code.google.com/p/django-granular-permissions/

djangoのパーミッションシステムに行レベルのパーミッションを追加します。

于 2008-11-27T10:40:14.097 に答える
0

http://bitbucket.org/jezdez/django-authority/を見つけたところ、有望に見えます。

于 2009-08-27T01:08:13.987 に答える