9

ネストされたルーター拡張機能を備えた Django REST フレームワークを使用しています。私のルートの 1 つは次のようになります。 companies/$company/locations/$locationwhere$company$locationare slug 変数。

ユーザーがこの URL に POST できるようにしたい:companies/$company/locations/新しい場所を追加する。POST を実行しているユーザーが、POST 先の会社の修正権限を持っていることを確認したいと考えています。現在django-guardian、オブジェクト レベルのアクセス許可に使用しています。POST メッセージには、新しい場所の名前のみが含まれ、URL から推測できる会社名は含まれません。この場合、権限を正しく適用するのに苦労しています。ビューセットのメソッドからcompany新しいオブジェクトのフィールドを設定していましたが、パーミッション チェックを適用するには遅すぎます。Locationpre_save

これを強制する最良の方法は何ですか?

ユーザーが POST に会社を含めている場合は、ビューセットに以下を追加することで会社を検証できます。

def get_queryset(self):
    parent = super(LocationViewSet, self).get_queryset()    
    return parent.filter(company__slug=self.kwargs['company_slug'])
4

1 に答える 1