python - 我的 Django 模型的权限

标签 python django django-permissions

我有一个名为 Logs 的模型:

class Logs(models.Model):
    entry = models.CharField(max_length=100)

一些用户可以管理日志,其他用户可以编辑,其余的只能查看。 您将如何在 Django 中处理此类权限?

我正在考虑添加一个新的多对多字段,一个用于管理员,另一个用于编辑,然后在保存功能上检查哪个用户属于哪个组。

但是,这似乎是静态的和糟糕的,我可以以某种方式使用 Django 的内置权限吗?还有哪些其他解决方案、软件包?解决此问题的最佳方法是什么?

我看到您可以在 Django 中创建自定义权限,即

permission = Permission.objects.create(codename='can_publish',
                                       name='Can Publish Logs',
                                       content_type=content_type)

但是我如何在 Logs 上检查权限,是否可以在 Save() 方法中完成。

最佳答案

您正在请求在 django.contrib.auth 中为您实现的权限功能.

特别是您想控制谁可以编辑模型,这包含在 default permissions 中 Django 。您还可以实现 custom permissions如果需要的话。

您将在 View 上检查这些权限,django.contrib.auth 提供permission_required decorator .哪个满足您的要求。

您也不需要为编辑管理员和用户重新实现多对多字段。您可以使用 django.contrib.auth Group 将您的用户添加到相应的组,然后为这些组分配权限:

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from api.models import Logs
new_group, created = Group.objects.get_or_create(name='new_group')
ct = ContentType.objects.get_for_model(Logs)

permission = Permission.objects.create(codename='can_clean_logs',
                                   name='Can clean logs',
                                   content_type=ct)
new_group.permissions.add(permission)

检查 django-guardian以获得更细粒度的控制和对象级权限。

django-rest-frameworkpermissions 提供一个钩子(Hook)并提供了 django 模型权限的集成。

以下答案也很有帮助:

User Groups and permissions

关于python - 我的 Django 模型的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573135/

相关文章:

python - AttributeError : Can only use . 具有 datetimelike 值的 dt 访问器

mysql - 在本地开发环境中配置 Django 以使用导入的 MySQL 数据库

python - 如何在 Django 中以编程方式批准所有已安装的应用程序权限

django-admin - django 管理员修改模型属性的权限

python - 导入命名空间

python - Django-Admin 站点的内置 TreeView ?

python - 使用 NLTK 和 WordNet;如何将简单时态动词转换为现在、过去或过去分词形式?

导航到新网址时,Javascript 在 Safari 中不起作用

django - Django Admin 中的可折叠内联

django - 向用户添加自定义权限