2014-01-13 80 views
2

我想序列化對象級權限 - 併發送一個簡單的TrueFalse到瀏覽器 - 因此我觸發「允許編輯」代碼。Django Rest Framework序列化權限

我正在這樣做,所以用戶沒有向他們展示他們無法使用的功能。

有沒有內置的方法來做到這一點?文件不提到這一點。

我試圖在串行如下:

has_permission = serializers.SerializerMethodField('check_permission') 

def check_permission(self, obj): 
    return self.check_object_permissions(self.request, obj) 

但串行沒有方法check_object_permissions - 屬於權限對象。

回答

1

Add方法將你的模型來檢查權限:

class MyModel(models.Model): 
    myfield = models.TextField(max_length=100) 

    def check_permissions(self): 
     # Perform your permissions functions 
     if (.....): 
      return True 
     else: 
      return False 

添加自定義字段到您的串行如下:

class MyModelSerializer(serializers.ModelSerializer):   
     has_permissions = serializers.BooleanField(source='check_permissions', read_only=True) 
     class Meta: 
     model = models.MyModel 
     fields = ("myfield","has_permissions") 
+0

或者,如果你需要知道的用戶,使用串行方法並通過序列化器上下文訪問當前用戶。 – paulmelnikow

+1

這會中斷分層:我必須將rest_framework.permissions導入到models.py中,除非我使用奇怪的意大利麪條,那麼我將無法對不同視圖上的相同模型使用不同的權限 – rikAtee

+0

要保持分層,可以使用Django用戶驗證並覆蓋視圖上的permission_denied方法。 – HungryArthur

相關問題