2014-05-21 42 views
0

我正在編寫一個應用程序,該應用程序具有大量必須按順序提交的字段。表單的每個部分只有在用戶有權訪問它時纔可用,這些權限在其中一個模型中定義,並且管理員用戶在條件滿足時將這些權限提供給用戶。如何在django中撤銷用戶的自定義模型權限

我現在要做的是在用戶提交表單的那一部分時,刪除該用戶的用戶權限。有什麼辦法可以做到這一點?

這裏是模型:

class PartidosUsuarios(models.Model): 
    idUsuario = models.ForeignKey(User) 
    idFifa = models.ForeignKey(PartidosFifa, null=True) 
    idPartido = models.CharField(max_length=20) 
    PaisL = models.CharField(max_length=250) 
    Local = models.IntegerField(max_length=11, default=0) 
    Visita = models.IntegerField(max_length=11, default=0) 
    PaisV = models.CharField(max_length=250) 
    Resultado = models.CharField(max_length=250) 
    Puntos = models.IntegerField(max_length=11, default=0) 
    Capturado = models.CharField(max_length=10, default="No") 
    class Meta: 
     permissions = (
      ("grupos", "Puede ver partidos de grupos"), 
      ("octavos", "Puede ver partidos de octavos"), 
      ("cuartos", "Puede ver partidos de cuartos"), 
      ("semis", "Puede ver partidos de semis"), 
      ("final", "Puede ver partidos de final"), 
     ) 
    def __unicode__(self): 
     return unicode(self.idPartido) 

這裏是視圖:

@login_required(login_url="/") 
def inicio(request): 
    if request.method == "POST": 
     form = Pronosticos(request.POST) 
     for i in range(47): 
      pronostico, _ = PartidosUsuarios.objects.get_or_create(idUsuario=request.user, idPartido=request.POST.get("idPartido"+str(i), ""), PaisL=request.POST.get("PaisL"+str(i), ""), Local=request.POST.get("Local"+str(i), ""), Visita=request.POST.get("Visita"+str(i), ""), PaisV=request.POST.get("PaisV"+str(i), ""), Capturado="Si") 
      if pronostico.Local > pronostico.Visita: 
       pronostico.Resultado = "Local" 
       pronostico.save() 
      elif pronostico.Visita > pronostico.Local: 
       pronostico.Resultado = "Visita" 
       pronostico.save() 
      elif pronostico.Local == pronostico.Visita: 
       pronostico.Resultado = "Empate" 
       pronostico.save() 
    partidos_usuarios = PartidosUsuarios.objects.order_by("idPartido") 
    partidos_fifa = PartidosFifa.objects.order_by("Partido")[:64] 
    context = ({"partidos_fifa": partidos_fifa, "partidos_usuarios": partidos_usuarios}) 
    return render(request, "brasil/inicio.html", context) 

在這種情況下,應在提交表格中刪除權限被一個叫「grupos」

任何幫助將不勝感激,謝謝!

回答

0

好吧,如果你有一個名爲rolegrupos和要刪除的權限爲role提交表單,或者如果你有一個名爲grupos自定義權限目前尚不清楚對我來說。但在這兩種情況下,你可以使用:permissions.utils.remove_permission(obj, role, permission)

其中:

OBJ

用於其權限應該被刪除的內容對象。

作用

用於其權限應該被刪除的角色。

許可

應刪除的許可。權限對象或權限的代號。

因此,在您看來,只需在您方便的時候調用此函數即可。

對於有關權限的更多信息,請參閱:Django API for manage permissions

+0

我創建了一個名爲grupos自定義權限。我不清楚我需要在你的解決方案中放置什麼「obj」,還有,我是否需要從django用戶模型中導入某些內容? – edalco9

+0

obj代表「用戶」或組。你也可以使用'some_user.user_permissions.remove(permission,permission,...)'。 –

+0

我寫在這樣的: 'permiso = User.user_permissions.remove(request.user,「grupos」) permiso.save()' 但是我得到這個屬性錯誤:'ReverseManyRelatedObjectsDescriptor'對象沒有屬性'刪除' 你能告訴我這是否是正確的做法嗎? – edalco9