2012-06-11 2 views
3

Des projets tels que Django-guardian et django-permissions vous permettent d'avoir des autorisations au niveau de l'objet. Toutefois, si deux objets sont liés entre eux par une relation parent-enfant, l'objet enfant peut-il hériter de l'autorisation de l'objet parent, sauf indication contraire? Par exemple, un subfolder doit hériter de l'autorisation parent folder à moins qu'un utilisateur attribue explicitement une autorisation différente pour le sous-dossier. Quelle est la meilleure façon d'y parvenir en utilisant Django, en particulier, le module Django-guardian?Autorisation en cascade au niveau de l'objet dans Django

Répondre

1

Lorsque vous vérifiez si un utilisateur dispose d'autorisations sur un objet et que ce n'est pas le cas, vous pouvez vérifier s'il dispose d'une autorisation sur son parent.

Vous pouvez même faire votre propre fonction, par exemple:

def your_has_perm(user, perm, obj): 
    has = user.has_perm(perm, obj) 

    if not has and hasattr(obj, 'parent'): 
     return your_has_perm(user, perm, obj.parent) 

    return has 

Cela devrait traverser les parents jusqu'à ce qu'il trouve une autorisation d'un parent ou d'un faux retour.

+1

Cela ne fonctionnera pas bien. Comment pourriez-vous savoir si les permissions ont été générées automatiquement et vous devriez les changer si les permissions des parents changent? –

+0

Juste, je n'ai pas beaucoup aimé, la réponse a été mise à jour d'une manière beaucoup plus simple. Merci pour votre avis. – jpic

+0

Donne un sens. Où est le meilleur endroit pour mettre une méthode comme celle-ci? De plus, comme la vérification d'autorisation récursive est effectuée dans le code, comment interrogez-vous la base de données pour obtenir une liste de tous les objets auxquels l'utilisateur a l'autorisation? – Tony

Questions connexes