python - Django 权限属于组,但该组上的用户没有组的权限

标签 python django permissions django-guardian

我决定不使用 django-guardian 因为如果我的客户删除/创建 Group 我必须在我的 ModelManager 上添加更多开销以将现有权限转移到新组。因此,让 filter_queryset 通过 Django REST 过滤实例对我来说很好。

失败的测试用例:

from django.contrib.auth.models import User

from poinkbackend.apps.companies.models import Company
from poinkbackend.apps.roles.models import Role
from poinkbackend.apps.userroles.models import UserRole
from poinkbackend.apps.commons.tests import companies, userprofiles, branches

def test_support_view_userprofile(companies, userprofiles):
    company = Company.objects.get(name='Singh')
    support = Role.objects.add_support('firstsupport', company)
    user = User.objects.get(username='notty')
    UserRole.objects.create(user=user, role=support)
    user.refresh_from_db()
    import pdb; pdb.set_trace()
    assert True is user.has_perm('view_userprofile')
-> assert True is user.has_perm('view_userprofile')
(Pdb) user.groups.first()
<Group: firstsupport-Singh>
(Pdb) g1 = user.groups.first()
(Pdb) g1.permissions.all()
<QuerySet [<Permission: userprofiles | user profile | View UserProfile>]>
(Pdb) user.has_perm('view_userprofile')
False

问题:
我哪里错了?

更新 2017 年 11 月 16 日 10:30 GMT+7 添加第 4 个 url 要点:
公司:https://gist.github.com/elcolie/684ba34391d0a94df7ca98855cea765b
角色:https://gist.github.com/elcolie/64a3a3daf22240b2072e113eb10164e2
用户角色:https://gist.github.com/elcolie/d28e7fcf54334a9f13df5fff1b7d9fe0
营业执照:https://gist.github.com/elcolie/bbeb00f41db0c7884cee34c6bccaf5f9

引用资料:
Django user has_perm returning false even though group has permission
Django user not getting the assigned group's permissions
django group permission

最佳答案

虽然找到了错误的根源。我已根据@Adam Dobrawy 评论更新了我的问题。

问题是我混淆了守护者的命令。 django-guardign<​​ 语法可以在没有 app_label 的情况下使用。在我的例子中是 userprofiles

我必须将行 user.has_perm('view_userprofile') 替换为 user.has_perm('userprofiles.view_userprofile')

再次。非常感谢 Adam 花时间和精力阅读我的问题。

关于python - Django 权限属于组,但该组上的用户没有组的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299072/

相关文章:

python - Django休息框架: Generate a unique obfuscated ID from ID field

python - 调用函数而不先创建类的实例

python - 如何在模型中设置元类中未定义的字段

django - 为非 super 管理员的用户排除 django admin 中的字段

java - 自签名小程序未获得完整权限

linux - 如何为不同的用户维护不同的编译库?

python - 如何在新的 Python 进程中设置环境变量

python - 类型错误 : writelines() requires an iterable argument

django - 无法访问 Django 测试数据库

Facebook 错误 : "(#100) Tried accessing nonexisting field (user_friends) on node type (User)"