2016-01-02 4 views
1

J'ai besoin de rendre certains modèles Django disponibles pour les utilisateurs de is_staff=True dans l'interface d'administration de Django. Je ne veux pas aller pour chaque utilisateur et leur attribuer des autorisations ou des autorisations de groupe pour les utilisateurs du personnel.Django Admin - Autoriser les modèles à être affichés pour les utilisateurs de is_staff

Quelle méthode dois-je remplacer dans la classe ModelAdmin ou BaseModelAdmin ou existe-t-il un autre moyen plus simple? J'utilise Django 1.4 Version

+0

Je ne comprends pas. Vous souhaitez restreindre un modèle uniquement pour "staff" mais vous ne préciserez pas quels utilisateurs sont "staff"? Alors comment ça va marcher? – user3041764

+0

J'utiliserai is_staff du modèle auth_user pour déterminer quels utilisateurs sont employés. J'ai une exigence où les utilisateurs du personnel (is_staff = True dans le modèle auth_user) doivent également effectuer une opération CRUD sur un modèle spécifique. – SiddharthG

+0

utilisez donc le décorateur 'staff_member_required', mais ils doivent d'abord appartenir à ce groupe, mais vous avez écrit que vous ne voulez pas entrer dans chaque USER et l'ajouter au groupe. – user3041764

Répondre

1

Le décorateur staff_member_required

staff_member_required (redirect_field_name = 'next', login_url = 'admin: login') [source]

Ce décorateur est utilisé sur la vues d'administration qui nécessitent une autorisation. Une vue décorée avec cette fonction volonté ayant le comportement suivant:

Si l'utilisateur est connecté à, est un membre du personnel (User.is_staff = True) et est actif (User.is_active = True), exécutez la voir normalement.

Sinon, la requête sera redirigée vers l'URL spécifiée par le paramètre login_url , avec le chemin initialement demandé dans une variable de requête spécifiée par redirect_field_name. Par exemple: /admin/login /? Next =/admin/polls/question/3 /.

Exemple d'utilisation:

from django.contrib.admin.views.decorators import staff_member_required 

@staff_member_required 
def my_view(request): 
    ... 
+0

Je dois utiliser le système d'administration django. Je n'appelle aucune fonction de vue depuis que j'utilise l'interface d'administration de Django. – SiddharthG

+0

ceci est admin décorateur – user3041764

+0

comment puis-je voir ces modèles dans l'interface d'administration django lorsque je me connecte à mon site http://127.0.0.1:8287/admin/ et mon utilisateur est un membre du personnel (is_staff = True). Je ne vois que pour cet utilisateur - "Vous n'avez pas la permission de modifier quoi que ce soit". mais pour l'utilisation admin (is_admin = True), je vois la liste de tous les modèles enregistrés. – SiddharthG

0

Quelque chose comme cela devrait fonctionner:

class StaffRequiredAdminMixin(object): 

    def check_perm(self, user_obj): 
     if not user_obj.is_active or user_obj.is_anonymous(): 
      return False 
     if user_obj.is_superuser or user_obj.is_staff: 
      return True 
     return False 

    def has_add_permission(self, request): 
     return self.check_perm(request.user) 

    def has_change_permission(self, request, obj=None): 
     return self.check_perm(request.user) 

    def has_delete_permission(self, request, obj=None): 
     return self.check_perm(request.user) 

et tous ModelAdmin (s) doit hériter de cette classe. Par exemple:

class MyModelAdmin(StaffRequiredAdminMixin, admin.ModelAdmin): 
    pass 

admin.site.register(MyModel, MyModelAdmin) 

Veuillez noter que ce code n'a pas été testé.

+0

Votre code semble parfaitement bien. mais le modèle ne figure pas dans le modèle d'administration d'un utilisateur personnel tant que je n'ai pas spécifiquement fourni sa permission dans la table d'autorisation.Je voulais simplement contourner les autorisations d'attribution/de groupe. Ce code entrera en image une fois que j'ai ce modèle répertorié dans mon modèle d'administration pour un utilisateur du personnel. – SiddharthG

0
class TeacherAdmin(admin.ModelAdmin): 
    def has_add_permission(self, request): 
     return True 
    def has_change_permission(self, request, obj=None): 
     return True 
    def has_module_permission(self, request): 
     return True 

vérifie has_module_permission si le modèle peut être répertorié dans les étiquettes des applications tableau