Django DetailViewがM2Mフィールドのユーザーにアクセスしてアクセスを制限しますか?

master_j02

私は現在、で作業しておりDetailView、いくつかのビジネス詳細のJsonResponseを返します。私はとを使用してtest_funcこれらの管理者専用ビューにアクセスできるUserPassesTestMixinユーザーのみを確認していis_admin=Trueます。

現在、私のBusinessDetailモデルにownerは、ビジネスの所有者であるユーザーにリンクされたM2Mフィールドであるというフィールドがあります。もちろん、それself.request.userBusinessDetailモデルのownerフィールドにあることを確認するために、ビューを制限する必要があります。

私はこれを含むいくつかのことを試みました...

class BusinessDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
    model = BusinessDetail

    def test_func(self):
        return self.request.user.is_admin

    def get_object(self, queryset=None):
        business = get_object_or_404(BusinessDetail, pk=self.kwargs.get('pk'))
        serialized_obj = serializers.serialize('json', [business])
        return  serialized_obj

    def get(self, request, *args, **kwargs):
        try:
            business = self.get_object()
            logger.debug(business obj: {business}')
            if self.request.user not in business.owner.all():
                logger.debug('Error: Access not granted.')
                return JsonResponse({'Error': 'Access restricted.'})
            return JsonResponse(json.loads(business), status=200, safe=False)
        except Exception as e:
            logger.error(f'Error getting business detail with error: {e}')
            return JsonResponse({'Error': 'DB error, return to previous page'}, status=500)

私のロガーは次のように見えます...

==> /var/log/app/logger/debug.log <==
DEBUG 2020-12-08 21:35:19,935 /app_site/business_admin/views.py get 379 Business obj: [{"model": "authentication.business_detail", "pk": 3, "fields": {"name": "test name", "phone_no": "(111)-111-1111",  "street": "111 5th st, "city": "Fort Lauderdale", "state": "Florida", "zip": "33087", "primary_email": "[email protected]", "owner": [4], }}]
ERROR 2020-12-08 21:35:19,935 /app_site/business_admin/views.py get 379 Error getting business detail with error: 'str' object has no attribute 'owner'

ロガーに出力されたフィールドにownerアクセスするのにまだ問題があるため、これらのビューをフィールドにリンクされているユーザーに制限する別の/より良い方法はありownerますか?そのownerフィールドにアクセスするのに本当に問題があります。

助けてくれてありがとう!

ウィレムヴァンオンセム

これは次の方法で制限できます。

def get_object(self, queryset=None):
    business = get_object_or_404(
        BusinessDetail,
        pk=self.kwargs['pk'],
        owner=self.request.user
    )
    # …

ログインしたユーザーが所有者のメンバーでない場合、これはHTTP404応答を返します。

あなたは、test_funcしかし、唯一の観点から制限されます管理者ユーザーを、ひいては所有者である唯一の管理者ユーザーは、この表示されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

フォームを使用してdjangoテンプレートのm2mフィールド値にアクセスする

djangoテーブル2はm2mにアクセスします

Django フィルターを使用してユーザー プロファイルに基づいてデータへのアクセスを制限する

Djangoは、「values()」または「values_list()」を介してプリフェッチされたM2Mフィールドにアクセスする際に追加のクエリを実行しますか?

m2m_changedシグナルハンドラーのモデル追加フィールドを介してDjangoにアクセスします

Graphene / Djangoのユーザータイプに基づいてモデルのフィールドアクセスを制限する方法

ユーザーがすでにログインしている場合は、PasswordResetViewでDjangoのreset_password形式へのアクセスを制限します

Django: ログインしていないユーザーに静的フォルダーへのアクセスを制限する

Djangoカスタムユーザープロファイルフィールドにアクセスします

Django RESTFramework特定のシリアライザーフィールドへのユーザーアクセスを制限する方法

Djangoはユーザーオブジェクトへのアクセスを制限します

Django管理者はタグ(アイテムのm2mフィールド)に基づいてm2mアイテムを選択します

Django Rest Frameworkを使用して「ManyRelatedManager」のさまざまなフィールドにアクセスしますか?

クラスベースのビューを使用して、テンプレートの一部へのアクセスをグループの一部であるユーザーに制限します。Django 2.0

ユーザーの電子メールによるアクセスを制限する Django Saleor

Django-ユーザーがURLにアクセスするのを制限する

Django:リストの各値に「in」を使用したM2Mフィールドクエリ

django-tables2でクラスベースのビューを使用してユーザーグループでフィルタリングしようとすると、self.userにアクセスできません

djangoは、外部キーオブジェクトのリストをm2mフィールドに保存します。

Djangoは、m2mからモデルまでのフィールドごとにクエリセットに注釈を付けます

DJANGO-profile.userのリバースアクセサーが同じフィールドのリバースアクセサーと衝突しますか?

許可されていないユーザーがdjangoのさまざまなページにアクセスできるように制限する方法

Django - ユーザーによる同じ値へのアクセス制限

Django-選択したユーザーに基づいてユーザープロファイルのアクセス許可を追加する方法

1つのフィールド(Django)へのユーザーアクセスのみを許可する

ビューへのアクセスをDjangoのスーパーユーザーのみに制限するにはどうすればよいですか?

Django:別のモデルを介してモデルのフィールドにアクセスする

djangoのリストフィールドから値にアクセスします

DjangoはM2Mフィールドで独自性の地獄をオブジェクトします

TOP 一覧

  1. 1

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    CSSのみを使用して三角形のアニメーションを作成する方法

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Excel - count multiple words per cell in a range of cells

  9. 9

    PictureBoxで画像のブレンドを無効にする

  10. 10

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  11. 11

    スタート画面にシャットダウンタイルを追加するにはどうすればよいですか?

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  14. 14

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  15. 15

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  16. 16

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  17. 17

    QGISとPostGIS(マップポイント(米国の地図上にraduisを使用した緯度と経度)

  18. 18

    MLでのデータ前処理の背後にある直感

  19. 19

    ターミナルから「入力ソースの変更」ショートカットを設定する

  20. 20

    パンダは異なる名前の列に追加します

  21. 21

    同じクラスの異なるバージョンを使用したクラスローディング:java.lang.LinkageError:名前の重複クラス定義を試行しました

ホットタグ

アーカイブ