2つのユーザーレベルを使用してページへのアクセスを制限しようとしています。スーパーユーザーと管理者。スーパーユーザーは、通常のDjango「is_superuser」が割り当てられたユーザーです。管理ユーザーも、「is_staff」権限のみが割り当てられた通常のユーザーです。
問題は、管理ユーザーにこのデコレータを使用すると、テストに合格しないことです。
_@permission_required('is_staff')
def my_view(....)
_
@permission_required('is_staff')
は、匿名ユーザーに対してfalseを返します。 (正しい)@permission_required('is_superuser')
は、スーパーユーザーに対してのみtrueを返します(正しい)@permission_required('is_staff')
は、「is_staff」パーマが割り当てられているユーザーに対してFALSEを返します。 (違う)。
何かご意見は?
is_staff
は許可ではないので、代わりにpermission_required
使用できます:
@user_passes_test(lambda u: u.is_staff)
または
from Django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
クラスベースのビューの場合、 serPassesTestMixin が便利です。
class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_staff
...
クラスベースビューの場合は、permission_required('is_staff')
をurls.py
に追加できます。
from Django.contrib.auth.decorators import permission_required
url(r'^your-url$', permission_required('is_staff')(YourView.as_view()), name='my-view'),