問題タブ [django-guardian]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Django-guardian と Flatpages を使用して 1 つのオブジェクトのみに権限を設定する
Django-guardian を使用して、特定のフラットページにアクセス許可を適用しようとしています。私たちのサイトには多くのフラットページがあり、ほとんどの場合、django-auth は必要なものに対して機能します。ただし、一部のフラットページと特定のユーザーにオブジェクト レベルのアクセス許可を追加したいと考えています。
たとえば、ユーザーYOUNGTEMP
がいて、このユーザーに、サイトにあるフラットページ全体のサブセットを編集するアクセス権を与えたいとします。
Django-guardian をインストールし、シェルを使用change_flatpage
して、適切なサイトに対してこのユーザーに許可を与えました。このユーザーには、管理者からこの1つのサイト以外は何も見せたくないので、他の権限はまったくありません。
DB を見て、権限が存在することと、SU としてログインしたときに権限が管理者に表示されることを確認できます。では、なぜこのユーザーとしてログインするとYOUNGTEMP
、管理サイトから編集権限がないと言われるのでしょうか?
ここの readthedocs.io ページからの抜粋に従って、シェルでアクセス許可を割り当て、オーバーライドされた管理者に問題がないことを確認しました。これは次のようになります。
すべてが機能しているように見えますが、それでも私の目的を達成するために機能しません...
re:@solarissmoke のリクエスト:
の結果get_users_with_perms
>>> get_users_with_perms(page_i_want_to_give_perms_for[0],attach_perms=True)
{<User: epss_student_worker>: [u'change_flatpage']}
python - Django の複数のモデルに対する生のクエリと行レベルのアクセス制御
ユーザーがデータベースに対してカスタム クエリを作成するためのインターフェイスを提供しようとしています。許可されているレコードのみをクエリできるようにする必要があります。そのために、 django-guardianを使用して行ベースのアクセス制御を適用することにしました。
これが私のスキーマの外観です
次のようにget_objects_for_groupを使用できるようにしたいと思います。
これにより、QuerySet が得られます。上記で定義した BaseClass を使用して、他の関連クラスに対して生のクエリを作成できますか?
このアプローチは理にかなっていますか?この問題に取り組むためのより良い方法はありますか?
ありがとう!
編集:
この問題に対処する別の方法は、ユーザーごとに個別のテーブルを作成することです。これによりアプリケーションが複雑になる可能性があることは理解していますが、
- ユーザー数は長期的には 100 人を超えることはありません。消費者向けアプリケーションではありません。
- 私たちのユースケースによると、これらのテーブル全体でクエリを実行する必要がある可能性はほとんどありません。同じモデルに属する table1、table2、table3 から何かを集計する必要があるクエリは記述しません。
- 顧客ごとに個別のテーブルを維持することには利点があります。
これは実行可能なアプローチだと思いますか?
python - save_model で古いフィールド値を取得する方法
私のプロジェクトには、個々のプロジェクトのLead_projectパーミッションを持つ 1 人のリーダーが必要です。この Leader は Project クラスに ForeignKey として格納されます。私のカスタム ProjectAdmin では、save_modelを定義してパーミッションを割り当てることができました。
私のプロジェクトクラス:
オブジェクトのアクセス許可に django-guardian を使用しています。Assign_permはそのショートカットの 1 つです。remove_perm (これも django-guardian ショートカット)を使用することを考えましたが、「古い」ユーザーの ID が必要です。
質問: 古いユーザーの ID、または一般的にフィールドの以前の値を取得するにはどうすればよいですか。
python - django-guardian パーミッションに基づいて get_queryset をオーバーライドします
get_queryset
ユーザーがdjango Guardianから持っているオブジェクトのアクセス許可に基づいてオーバーライドしようとしているため、ユーザーがアクセス許可を持っているオブジェクトのみが表示されます。
悲しいことに、これは文字通り何もせず、ユーザーが持っている権限に関係なく、すべてのアイテムが表示されます。