2015-06-01 114 views
2

型号我有一个名为Logs模型:权限在我的Django的

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()方法来完成。

+1

是,刚刚成立的用户组,并使用Django的权限系统https://docs.djangoproject.com/en/1.8/topics/auth /默认/#主题授权 – Anentropic

+1

如何检查权限是否有点文件页面https://docs.djangoproject.com/en/1.8/topics/auth/default/#the-permission-required-decorator – Anentropic

+0

@Antropic可以将这个装饰器应用于Django Rest框架,即在那里的视图? – Prometheus

回答

4

您要求的权限功能是在django.contrib.auth中为您执行的。

特别是你想控制谁可以编辑一个模型,它包含在django的default permissions中。如果需要,您也可以实施custom permissions

你会检查这些权限的意见和django.contrib.auth提供permission_requireddecorator。这就是你所需要的。

您不需要为编辑管理员和用户重新实现多对多的领域。您可以使用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提供了一个钩子,并提供了django模型权限的集成。

以下的答案也可以是有益的:

User Groups and permissions

+0

Django-guardian的+1。尽管你可能不需要另一个类的依赖关系,并且可以自己实现权限。 – fiacre