Django - 权限与个人资料

2 投票
1 回答
5045 浏览
提问于 2025-04-16 09:24

我有几个不同的用户角色,我想把权限和这些角色关联起来。我是这样做的:

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”的东西吗?

1 个回答

4

.has_perm 是一个方法,它属于 User 对象,而不是 UserProfile 对象。如果你想检查一个用户是否有权限 has_student,你需要这样做:

user.has_perm('profiles.is_student')

假设你的 StudentProfile 模型是在一个叫 profiles 的应用里。

编辑:针对你重新表述的问题,你应该按照正常的方式分配权限,要么给一个组,要么给某个特定的用户,然后使用 User.has_perm。你后面的例子完全违背了 Django 权限系统的设计初衷。

撰写回答