2

我有几个不同的个人资料。我想将权限与这些配置文件相关联。我已经这样做了:

class StudentProfile(UserProfile):
    school = models.CharField(max_length=30)
    class Meta:
        permissions = (
            ("is_student","Can access student pages"),
        )

但是,当我尝试在该配置文件对象上使用 has_perm 检查该权限是否存在时,我收到一个错误“'StudentProfile' 对象没有属性'has_perm'”我不应该以这种方式检查权限吗?我已经阅读了文档,这就是我认为我应该做的

编辑: 再次阅读文档后,似乎 has_perm 是属于用户而不是他们的个人资料的方法。但是,当我尝试显示权限时:

print user.get_all_permissions()

我得到一个空集。我不应该看到像“appname.is_student”这样的东西吗

4

1 回答 1

4

.has_perm是对象上的方法User,而不是UserProfile对象上的方法。如果您尝试验证用户是否具有 has_student 权限,则需要执行以下操作:

user.has_perm('profiles.is_student')

假设您的 StudentProfile 模型在profiles应用程序中。

编辑:为了解决您改述的问题,您应该以正常方式分配权限,无论是给组还是给特定用户,然后使用User.has_perm. 您的后一个示例完全违背了 Django 权限系统的观点。

于 2011-01-04T18:58:32.373 回答