Django 1.9 を使用しています。クラスベースのビューに PermissionRequiredMixin を追加しようとすると、期待どおりに動作しないようです。auth_group に新しいユーザーを作成しました。この auth_group には、どのアプリやモデルに対する権限もありません。この新しいユーザーは、スーパーユーザーまたは管理者ユーザーではありません。ただし、アプリは、permission_required が必要な特定のビューにこのユーザーがアクセスすることを妨げません。
まず、ユーザーに権限がないことを確認するために私が試みたのは次のとおりです。
user.get_all_permissions() # return set() - empty permission, which is correct.
user.is_superuser # return false, which is correct.
user.has_perm('myapp.add_something or even any words that make no sense') # always return true, which is very weird.
アプリにはカスタム ユーザー モデルがあり、AUTHENTICATION_BACKENDS として django-allauth も使用します。PermissionRequiredMixin が user.has_perm() をチェックし、常に true を返すかどうかわからないので、権限のチェックが期待どおりに機能しないのはなぜですか?
# views.py
class My_View(PermissionRequiredMixin, View):
permission_required = 'polls.can_vote'
def get(self, request, *args, **kwargs):
# do something...
return render(request, "template.html", {})
# models.py - Custom User Model
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
group = models.ManyToManyField(Group, through='UserGroupRelationship')
....
# models.py - many-to-many relationship between user and group
class UserGroupRelationship(models.Model):
user = models.ForeignKey("CustomUser")
user_group = models.ForeignKey(Group)
また、urls.py で許可を確認する古い方法も試しました。ユーザーのアクセスも妨げないので、PermissionRequiredMixin を使用することの問題ではないと思います。
urlpatterns = patterns('',
(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
)