【问题标题】:Django - permissions and profilesDjango - 权限和配置文件
【发布时间】:2011-01-04 18:46:51
【问题描述】:

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

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”这样的东西

【问题讨论】:

    标签: python django django-models django-permissions django-profiles


    【解决方案1】:

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

    user.has_perm('profiles.is_student')
    

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

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

    【讨论】:

    • 好的,谢谢。我会尝试以“profiles.is_student”的方式进行,看看是否可行
    • 如果我在编辑单个用户时通过管理工具执行此操作,它只会分配权限。当用户定期注册并附加配置文件时,配置文件中元类中定义的权限不会附加。 print user.get_all_permissions() 结果为空集
    • @JPC:您需要将用户分配到具有权限的正确组,或者在用户注册时直接授予用户正确的权限。如果您有自己的表单处理代码,则可以在创建用户对象后执行此操作:user.permissions.add('profiles.is_student'),如果Student 组具有profiles.is_student 权限,则为user.groups.add('Student')
    • 当我使用组时,它工作得很好。但对我来说,必须 1) 在配置文件的元数据中定义权限 2) 将这些权限添加到组 3) 将该用户添加到组中,这似乎是多余的。为什么用户配置文件不能替代组?诸如 user.permissions.add('profiles.permissions') 之类的东西怎么样,它会自动添加配置文件中的所有权限
    • 还要添加一些东西,我认为应该是 user.user_permissions.add(),但是当你执行 user.user_permissions.add('profiles.is_student') 时,它需要一个 int,而不是字符串,所以抛出错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2017-03-14
    • 2020-04-07
    • 2011-08-18
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多