问题标签 [django-guardian]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1235 浏览

django - 为什么 django-guardian 的 assign_perm 给了我一个 DoesNotExist 错误?

我正在尝试使用 django-guardian 为任务分配用户权限,但出现错误。

在 task/models.py 的 Task 类中,我有:

当我进入

python manage.py 外壳

并尝试分配这些权限,它会引发错误。

这是我正在尝试的:

这是错误:

DoesNotExist:权限匹配查询不存在。

有谁知道我做错了什么?我想我遵循了 django-guardian 帮助中的说明,但也许我错过了什么?

0 投票
2 回答
3032 浏览

python - 使用 Django 模型权限会引发 DoesNotExist 错误

我对 django Guardian 有一些问题。我定义了一个新闻模型

然后我尝试将 view_news 权限分配给我的一位用户,我收到以下错误:

我已经尝试迁移我的应用程序,但这似乎并没有解决我的问题。请问有什么帮助吗?

谢谢!

0 投票
1 回答
1223 浏览

python - 了解 Guardian.shortcuts.get_objects_for_user

我无法理解 django-guardian 函数 get_objects_for_user 的行为。我正在分配组对象权限,但 get_objects_for_user 似乎不存在这些权限。

但是,文档似乎很清楚:

我什至不知道从哪里开始调试。有什么建议么?

更新:

我的模型定义如下:

0 投票
1 回答
185 浏览

django - 将 django-filter 与 django-guardian 一起使用

django-filter我在制作和django-guardian合作方面失败了。我需要的是一个ItemsFilterView允许用户列出和过滤她有权查看的所有项目。以下是我认为最相关的代码部分。我可以根据要求添加更多内容。

我认为get_objects_for_user(request.user, 'view_item')应该用来将查询集缩小到仅允许的项目,然后再django-filter动手,但我找不到合适的位置来添加它。

0 投票
1 回答
1626 浏览

django - 姜戈守护者。如何过滤权限列表?

django-guardian用来管理我的权限。默认每个模型有 3 个烫发:add, change, delete. 如果我添加自己的权限,例如view,我将在用户管理选项卡中拥有所有 4 个,在模型对象管理选项卡中拥有所有 4 个。

我知道可以过滤权限:Django admin - change permissions list

但我不知道如何在模型对象管理选项卡中过滤权限。甚至可能吗?

0 投票
1 回答
1723 浏览

python - django-guardian 自定义用户权限

设置

我刚刚开始与django-guardian合作,并立即遇到了一些障碍。我通过扩展 AbstractBaseUser 类来使用自定义用户。我按照这个示例设置了我的 models.py 和 admin.py。我还按照开发人员指南配置指南来设置监护人。


问题

AttributeError: type object 'MyCustomUser' has no attribute 'groups'每当我尝试获取与用户相关的权限时, django-guardian 都会引发错误(MyCustomUser 是我的自定义用户类) ,即当我添加权限时,它会直接进入guardian_userobjectpermission表中,就像它应该的那样。但是,调用get_perms抛出上述错误。

尝试通过管理页面编辑权限时出现相同的错误。(程序上添加的权限不会出现在这里。:/)我写了一个小的 manage.py 任务来测试它:


可能的解决方案

  1. 设置身份验证后端可能存在问题。我目前将其设置为:

    AUTHENTICATION_BACKENDS = (

    )

  2. 也许实现自定义用户 => 更改/实现自定义组?目前我在 admin.py 中有 admin.site.unregister(Group),但更改它并没有帮助。

  3. 正如开发人员警告的那样,监护人可能与自定义用户不兼容?

0 投票
2 回答
6710 浏览

python - Django admin 中的对象级权限

我有一个看起来像这样的模型:

然后我通过以下方式在 Django 管理员中注册模型:

我想要实现的是确保特定更改的 Plan_owner 是除了超级用户之外唯一可以编辑它的人。每个人都可以查看它,但计划所有者是唯一可以对其进行更改的人。此外,我的意思是编辑,他可以做任何事情,但删除一行。我看过 Django Guardian,它完全符合我的要求,但必须手动为每一行设置 Guardian 的权限。我正在寻找一种解决方案,其中这些权限是根据我的要求自动设置的......

0 投票
0 回答
2568 浏览

python - django-guardian - AUTH_USER_MODEL 指的是尚未安装的模型'auth.User'

我正在尝试让 django-guardian 使用我的应用程序。我按照 django-guardian 文档中的安装和配置步骤进行操作。它无法使用“配置不当:AUTH_USER_MODEL 指的是尚未安装的模型'auth.User'”分配权限。

我已阅读相关的 Django 文档并了解 AUTH_USER_MODEL 设置在使用自定义用户模型时使用“app_label.UserModel”格式。我没有使用自定义用户模型,而是使用默认的 django 模型。

我在互联网上找到的所有问题和解决方案都与我认为不适用于我的自定义用户模型有关。

我正在使用 django 1.6.1 和 django-guardian 1.1.1。dj-guardaian 教程:

http://django-guardian.readthedocs.org/en/latest/userguide/assign.html

我试图设置 settings.AUTH_USER_MODEL = 'guardian.User' 无济于事。

任何帮助表示赞赏!

干杯

这些是确切的步骤(在导入设置之后):

设置.py

0 投票
1 回答
154 浏览

python - Python Django (Guardian):根据我的模型中的 m2m 字段编辑数据

我真的很难让我的管理界面正常工作。我有一个模型,并且在该模型中有一个要分组的 m2m 字段:

现在,当模型被保存时,我想给这些组特殊的查看权限,这样只有这些组的成员才能看到该模型的对象。我使用django-guardian来获取每个对象的权限。所以在我的模型的保存方法中,我做了这样的事情:

我也尝试使用 post_save 信号,但问题是,我总是在我的管理界面中按下保存按钮两次以进行任何更改(组总是以正确的方式添加,但权限只添加在第二次通过管理界面中的保存按钮保存模型)那么这里发生了什么?有人可以帮忙吗?

- - 编辑 - -

我的解决方案:我将权限分配代码移到了我的 ModelAdmin 类中,如下所示:

管理员.py

0 投票
1 回答
1509 浏览

python - 优化 django 架构以加快 admin 中的列表视图

我正在为我的公司开发一个中型站点,其中包含大量数据(研究出版物、数百名员工等)和安全限制,这让我想到了使用 django-guardian 来处理对象权限。但是现在我意识到这在管理员中可能会很慢。

我们已经实现了一个 redis 缓存,它似乎工作得很好,但是加载大型列表视图(数百个元素)仍然需要很长时间。

到目前为止,我们正在使用以下设置:

例如,这是 Person 模块,它的列表视图需要很长时间才能加载(不是超级用户,在这种情况下它非常快:这就是我认为问题出在 django-guardian 多重关系上的原因):

我知道瓶颈也可能在我的 Admin 类中。这是我们正在使用的:

您能给我任何建议或建议我们可以集成到管理界面中的任何可能的解决方案吗?:-)

提前致谢!

编辑

使用 django-debug-toolbar,我可以看到对 django-guardian 的查询很少,而且速度非常快(都低于 6 毫秒)。另一方面,对于 263 个列表视图,我有超过 7500 个查询,这会使视图的生成速度减慢到 46 秒。几乎所有这些都在我定义的模型中,用于加载(我认为)无用的数据:我想只需要名称和对象 ID。

如何限制在 queryset() 方法中加载的数据量?谢谢。