gpt4 book ai didi

python - 具有装饰器与权限的 Django 用户组

转载 作者:太空狗 更新时间:2023-10-30 00:08:26 24 4
gpt4 key购买 nike

我了解基本的用户身份验证、登录、创建帐户、扩展用户模型...

我正在尝试创建一个教师和学生可以登录的站点。教师可以访问学生无法访问的页面,并有权发布作业等...

我认为可以这样做:

  1. 在创建用户时将用户分配到特定组。
  2. 使用装饰器限制对适当组的访问。

.

@login_required
@user_passes_test(not_in_student_group, login_url='/login/')
def some_view(request):
# ...

def not_in_student_group(user):
if user:
return user.groups.filter(name='Student').count() == 0
return False

请注意,我从以下位置获得了上述代码:

http://bradmontgomery.blogspot.com/2009/04/restricting-access-by-group-in-django.html

问题:

  1. 使用权限与上述方法有何不同?

  2. 如何使用权限,定义权限如何帮助我实现上述结果?(如果可以这样做,是否应该使用?)

最佳答案

似乎有一百种方法可以让人们在 Django 中获得关于授权和许可的相同结果。当然,群组是一种方式。

Django 权限通常基于您的数据,因此“基于表”或“基于行”。基于行的权限不是 Django 原生的,您必须推出自己的解决方案,或者使用类似 django-guardian 或 django-authority More Here 的东西.

关于权限的文档是 here

class Quiz(models.Model):
title = models.CharField(max_length=64)

class Meta:
permissions = (
("can_take_quiz", "Can take quiz"),
("can_grade_quiz", "Can Grade Quiz"),
)

使用此模型和这些权限,您可以看到学生助手可能会被授予对特定测验或给定教师的测验进行评分的权限,这就是基于行的权限的用武之地。实现类似的东西(通过 has_permission)可以解决问题(并且更明确),而不仅仅是将用户添加到组中。

您可以像现有的那样将用户添加到组中,然后授予整个组添加测验或评分测验(教师可以添加/编辑/删除/评分,学生可以参加)测验的权限,并根据那个。

然后您的 user_passes_test 将是 user.has_perm('quiz.take_quiz') 或者您可以将特定测验传递给基于对象的后端而不是装饰器。

关于python - 具有装饰器与权限的 Django 用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com