2015-06-01 48 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