即使添加权限,Django权限也无法正常工作

时间:2020-08-23 20:12:58

标签: python django

Python 3.7,Django 3.0

大家好,我遇到了Django权限问题。 我有一个简单的Article类作为模型,如下所示:

class Article(models.Model):
  title   = models.CharField(max_length=120)
  content = models.TextField()
  active  = models.BooleanField()
  borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)

  class Meta:
    permissions = [("can_mark_owned", "Set article as owned")]

在我的views.py中,我认为该视图仅对具有“ can_mark_owned”权限的用户可用。如下所示:

class AssignOwnerLibrarian(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
  permission_required = ('article.can_mark_owned')
  template_name = 'articles/article_assign_owner.html'
  form_class = AssignArticleOwnerForm
  queryset = Article.objects.all()

我的问题是,仅当我以超级用户身份登录时才能访问此视图,而不能使用拥有权限(通过“管理”页面添加了权限)的用户访问,因此我在其中获得 403禁止

在我的测试文件中,我有以下代码:

class RenewBookInstancesViewTest(TestCase):
  def setUp(self):
    # Create a user
    test_user2 = User.objects.create_user(username='testuser2', password='2HJ1vRV0Z&3iD')
    test_user2.save()
    
    permission = Permission.objects.get(name='Set article as owned')
    test_user2.user_permissions.add(permission)
    test_user2.save()
    test_user2 = get_object_or_404(User, pk=test_user2.id)
    print(test_user2.has_perm('article.can_mark_owned')) # returns False

由于某种原因,最后一行的打印返回False。 非常感谢您的帮助,我已经在此问题上花费了多个小时。
谢谢!

1 个答案:

答案 0 :(得分:0)

弄清楚了,傻瓜自己写了Model名称而不是App名称:
'article.can_mark_owned'应该是'Blog.can_mark_owned'

我不好!