问题标签 [django-permissions]

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 投票
1 回答
378 浏览

python - ModelAdmin 线程安全/缓存问题

最终,我的目标是扩展 Django 的 ModelAdmin 以提供字段级权限——也就是说,给定请求对象的属性和正在编辑的对象的字段值,我想控制字段/内联是否可见给用户。我最终通过向 ModelAdmin 添加一个方法并can_view_field()修改内置方法来删除/排除用户没有权限(由 确定)查看的字段+内联来实现这一点。如果您想查看代码,我将它放在 pastebin中,因为它很长而且只是有点相关。get_form()get_fieldset()can_view_field()

它工作得很好......几乎。我似乎遇到了某种线程安全或缓存问题,其中 ModelAdmin 对象的状态以可重现的方式从一个请求泄漏到另一个请求。

我将用一个简单的例子来说明这个问题。假设我有一个模型,我使用字段级权限代码扩展了它的 ModelAdmin。该模型有两个字段: - public_field,任何工作人员都可以查看/编辑 - secret_field,只能由超级用户查看/编辑

在这种情况下,该can_view_field()方法如下所示:

测试用例 1:重新启动服务器后,如果您首先以超级用户身份查看更改列表表单,您会看到表单应该发生,两者都public_field可见secret_field。如果您注销并以工作人员(但不是超级用户)的身份查看它,您只会看到public_field.

测试用例 2:重新启动服务器,如果您先以员工身份登录,您仍然只能看到public_field. 但是,如果您随后注销并以超级用户身份查看,您将看不到secret_field. 这是 100% 可重现的。

我做了一些基本的线程安全诊断:

  1. 最后get_form(),我打印出了 ModelForm 对象的内存地址。应该如此,每个请求都是唯一的。因此,ModelForm 对象不是问题。
  2. 在管理员注册之前,我尝试打印 ModelAdmin 对象的内存地址。在测试用例 1 中,这两个请求都是唯一的。但是对于测试用例 2,它根本不会在第二个请求上打印。

在这一点上,我一无所知。我的下一个研究点将是管理员注册系统(我承认我对此一无所知)。状态会随着服务器重新启动而重置,所以似乎必须缓存 ModelAdmin?还是线程安全问题?如果我把它变成一个工厂并返回一个deepcopy()ModelAdmin,它会为每个请求提供一个新的 ModelAdmin 吗?我一无所知,如果有任何想法,我将不胜感激。谢谢!

0 投票
3 回答
6468 浏览

django - Django:基于模型实例的权限

我有一个模型class Project,对于每个模型实例,应该有一个可以编辑该实例的用户“组”。我想我可以添加另一个名为 ProjectEditor 的模型类来添加这些编辑器。有没有更好的方法来实现这一点?检查权限呢?我也需要编写自己的权限方法,对吗?

谢谢埃里克

0 投票
4 回答
12497 浏览

django - Django:在 URL 调度程序中应用权限?

在我的 Django 应用程序中,我拥有用户访问某些视图所需的某些权限(使用django.contrib.auth)。这很好用,@permission_required在我的视图函数上使用装饰器。

但是,我的一些 URL 解析为我没有编写的视图,例如内置的django.contrib.auth.views.password_change,如下所示urls.py

在这种情况下,我无处可应用我的@permission_required装饰器——或者是吗?有没有办法在 URL 调度程序级别应用权限限制?

0 投票
1 回答
360 浏览

django - 一个 m2m Django 权限模型

我正在构建的 web 应用程序上的用户有多个“他们的”对象让我们假设该对象被调用Toy

我希望他们能够为他们Toy的 s 设置隐私选项,以便他们可以设置以下可见性选项:

  1. 朋友的朋友
  2. 朋友们
  3. 只允许一组定义的人
  4. 仅限朋友,但拒绝一组人(对某些人保密)

所以说我有这样的模型:

我正在努力了解如何对权限数据和逻辑进行分层。

我可以添加一个permission_state存储上述选择的变量,然后为选项#3 和#4 设置一个 m2m,或者为 DENY 和 ALLOW 设置单独的 m2ms。

但是给定一个User,我将如何过滤用户可以看到的所有玩具而不进行无数不同的查询?理想情况下,我想Toy在一次访问数据库中生成一个对象列表。

还是我以错误的方式接近这个?

0 投票
1 回答
256 浏览

django - django多站点应用功能权限的最佳解决方案

我有两个使用相同基本代码的站点。每个站点对不同用户类型可以看到的功能都有不同的要求。例如,一个网站说任何人都可以查看新闻页面,但在另一个网站上,只有在“经理”用户配置文件中具有值的登录用户才能看到新闻。

所以管理这些权限的第一级很容易,每个站点都有一组不同的模板,并且在菜单模板中我根据用户配置文件显示或不显示菜单项。但是如何防止用户只输入新闻页面的 url?

  • 我无法从 urls.py 中删除新闻,因为此时我没有请求值
  • 我可以为访问模型或设置值的视图编写自定义装饰器,以确定当前用户是否具有访问权限
  • 我可以在中间件中做点什么吗?
  • 或者可能有更好的解决方案?
0 投票
3 回答
8460 浏览

django - Django:向特定模型实例添加权限

我正在寻找实现用户权限以允许用户编辑特定模型实例的最佳方法。

例如,我有这样两个模型:

现在我的 Operators 是我的内置 Django 用户。我想为这些用户创建组,以便他们只能添加/删除/编辑允许的 ProgramSchedules。此外,我想将这些用户的组添加到管理面板。

谢谢。

0 投票
1 回答
2129 浏览

python - Django - 管理工具中缺少一些权限

我不太确定该怎么做。我在 Eclipse 中使用 Django。我创建了一个新的 django 项目,并将以前的 django 项目中的代码复制到这个项目中。我运行了 syncdb 来设置数据库。我去管理页面重新创建我的组,但我注意到可用权限列表中缺少一些权限。在之前的项目中,有允许我“访问”个人资料的权限。在这个项目中,该权限不在列表中,但它也是我需要的权限。它去哪儿了?

0 投票
1 回答
4520 浏览

python - Django - 权限和配置文件

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

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

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

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

0 投票
5 回答
35255 浏览

python - Django - 某些视图的用户权限?

从管理员我看到您可以为用户或用户组分配权限:允许从模型中添加、更改或删除数据。

这很好,但我还需要允许用户或用户组访问或不访问一组视图。我的网站上有某些类型的服务,因此我希望允许某些用户访问某些服务(页面/视图),但不允许其他用户访问。

那么如何允许某些用户/用户组访问某些视图呢?谢谢!

0 投票
1 回答
44124 浏览

python - 如何使用 Django 组和权限?

我了解基本的用户内容。我知道身份验证、登录、创建帐户等。但现在我想处理组和权限。

django 组/权限的文档在哪里?这不是它:http ://docs.djangoproject.com/en/dev/topics/auth/