2017-06-12 41 views
0

我們使用Django 1.11和Django Rest Framework並試圖實現一些高級許可系統。DRF:將數據附加到每個響應

目前,我們有一些tehnical問題,其中之一是:返回鏈接的權限當前登錄的用戶(通過request.user)在每次請求

示例:端點http://localhost:8000/articles/1/應向用戶返回有關該文章和鏈接權限的信息。 事情是這樣的:

{'title': 'Article Title', 'pages': 50, 'permissions': ['can_read_article', 'can_update_article'] ...} 

這些權限應內Django管理>用戶&組系統進行管理。

非常感謝,任何幫助將利用Serializer Method Field抓住這些信息可以理解

+0

你已經有東西鏈接到每個實體的權限,例如一個ForeignKey? –

+0

一切都由Django Admin app管理:用戶鏈接到具有權限的組。 –

+0

啊,所以你沒有在與當前實體相關的權限之後,而是爲用戶本身?這似乎很奇怪,一篇文章的請求應該得到那篇文章的細節,而不是關於請求用戶的無關信息。 –

回答

0

你可以嘗試實現這一目標:

class ArticleSerializer(serializers.ModelSerializer): 
    permissions = serializers.SerializerMethodField() 

    def get_permissions(self, obj): 
     user = self.context['request'].user 

     # compute permissions 
     #permissions = user.get_all_permissions() # if you are using Django's permissions, see note below 
     permissions = get_perms(user, obj) # if you are using django-guardian 

     return permissions 

請注意,如果您使用的是Django的權限從django.contrib.auth其中沒有對象級別的權限,我不這樣做你的方法是最優的:不是每個請求都返回所有的權限,而是通過一個獨立的調用和存儲來獲取所有用戶的權限,以便在前端某處使用它後來。另一方面,如果您使用的是對象級權限,如django-guardian,則此方法似乎適用。