私は現在、で作業しておりDetailView
、いくつかのビジネス詳細のJsonResponseを返します。私はとを使用してtest_func
、これらの管理者専用ビューにアクセスできるUserPassesTestMixin
ユーザーのみを確認していis_admin=True
ます。
現在、私のBusinessDetail
モデルにowner
は、ビジネスの所有者であるユーザーにリンクされたM2Mフィールドであるというフィールドがあります。もちろん、それself.request.user
がBusinessDetail
モデルの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]
コメントを追加