2015-10-18 1 views
0

J'ai une application 'app_name' qui a un objet de profil qui est lié à un objet User via OneToOne Field. Maintenant, lors de la connexion, je redirige l'utilisateur vers une page de profil d'édition sur le site d'administration en utilisant l'URL en utilisant son identifiant d'objet de profil. J'ai accordé comme prévu l'accès à is_staff et l'autorisation de modifier les profils. Maintenant, je ne veux pas l'empêcher d'accéder à d'autres objets de profil. J'ai maintenant deux façons, ce que je peux penser: 1. Créez une autorisation personnalisée qui accorde l'accès à la modification de son profil uniquement aux utilisateurs qui se connectent. 2. Blocage d'URL n'impliquant pas d'identifiant d'objet de profil.Blocage d'URL dans le site d'administration django pour gérer les utilisateurs

Le superutilisateur devrait pouvoir accéder normalement car il est disponible par défaut.

Je ne sais pas comment je peux exécuter l'une des façons. Toutes les autres manières possibles sont trop bien accueillies. S'il vous plaît aider!

Répondre

0

Remplacer ModelAdmin.get_queryset() peut exclure d'autres objets:

class ProfileAdmin(ModelAdmin): 
    # current user can only see his profile 
    def get_queryset(self, request): 
     qs = super(ProfileAdmin, self).get_queryset(request) 
     if not request.user.is_superuser: 
      qs = qs.filter(id=request.user.id) 
     return qs 

Si vous voulez seulement contrôler l'autorisation de changement, passer outre ModelAdmin.has_change_permission():

class ProfileAdmin(ModelAdmin): 
    # current user can only edit his profile 
    def has_change_permission(self, request, obj=None): 
     # user has permission to edit a obj 
     if not obj or request.user.is_superuser: 
      return True 
     # user ONLY has permission to edit his obj 
     return request.user.id == obj.user.id 
+0

premier ne fonctionne pas pour moi. Cela ne fait guère de différence. La deuxième méthode donne un TypeError disant: "has_change_permission() prend au plus 2 arguments (3 donnés)" –

+0

Désolé, manqué 'self' dans la définition de la méthode. Mais le premier devrait fonctionner, un 404 sera levé quand n'importe quel utilisateur qui n'est pas super-utilisateur veut voir le profil d'un autre utilisateur. La seconde, tout en contrôlant l'autorisation de modification, permet à tous les utilisateurs d'afficher la liste des modifications. – JimmyYe