我的 Django 模型的权限
Permissions on my Model for Django
我有一个模型叫做 Logs
:
class Logs(models.Model):
entry = models.CharField(max_length=100)
一些用户可以管理日志,其他用户可以编辑,其余的只能查看。 你会如何处理 Django 中的此类权限?
我正在考虑添加一个新的 many-to-many
字段,一个用于管理员,另一个用于编辑,然后在保存功能上检查哪个用户属于哪个组。
但是,这似乎是静态的和糟糕的,我可以以某种方式使用 Django 的内置权限吗?还有哪些其他解决方案、软件包,解决此问题的最佳方法是什么?
我看到您可以在 Django 中创建自定义权限,即
permission = Permission.objects.create(codename='can_publish',
name='Can Publish Logs',
content_type=content_type)
但是 Logs
我将如何检查权限,这将在 Save()
方法中完成。
您正在请求 django.contrib.auth 中为您实现的权限功能。
特别是您想控制谁可以编辑模型,如果需要,它包含在 default permissions of django. You can also implement custom permissions 中。
您将检查这些视图的权限,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-framework provides a hook for permissions并提供django模型权限整合
以下回答也有帮助:
User Groups and permissions
我有一个模型叫做 Logs
:
class Logs(models.Model):
entry = models.CharField(max_length=100)
一些用户可以管理日志,其他用户可以编辑,其余的只能查看。 你会如何处理 Django 中的此类权限?
我正在考虑添加一个新的 many-to-many
字段,一个用于管理员,另一个用于编辑,然后在保存功能上检查哪个用户属于哪个组。
但是,这似乎是静态的和糟糕的,我可以以某种方式使用 Django 的内置权限吗?还有哪些其他解决方案、软件包,解决此问题的最佳方法是什么?
我看到您可以在 Django 中创建自定义权限,即
permission = Permission.objects.create(codename='can_publish',
name='Can Publish Logs',
content_type=content_type)
但是 Logs
我将如何检查权限,这将在 Save()
方法中完成。
您正在请求 django.contrib.auth 中为您实现的权限功能。
特别是您想控制谁可以编辑模型,如果需要,它包含在 default permissions of django. You can also implement custom permissions 中。
您将检查这些视图的权限,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-framework provides a hook for permissions并提供django模型权限整合
以下回答也有帮助:
User Groups and permissions