我的Django模型的权限

Pro*_*eus 3 python django django-permissions

我有一个模型叫做Logs

class Logs(models.Model):
    entry = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

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

我当时想添加一个新many-to-many字段,一个用于管理员,另一个用于编辑,然后在保存功能中检查哪个用户属于哪个组。

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

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

permission = Permission.objects.create(codename='can_publish',
                                       name='Can Publish Logs',
                                       content_type=content_type)
Run Code Online (Sandbox Code Playgroud)

但是Logs我将如何检查权限,这将在Save()方法中完成。

Seb*_*zny 6

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

特别是,您想控制谁可以编辑模型,这是django 的默认权限所包含的。如果需要,您还可以实现自定义权限

您将在视图上检查这些特权,并且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)
Run Code Online (Sandbox Code Playgroud)

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

django-rest-framework提供了权限挂钩,并提供了django模型权限的集成。

以下答案也可能有帮助:

用户组和权限