5

के लिए Django-nonrel में समूह अनुमतियां कैसे काम करें I GAA के लिए django-nonrel के लिए काम कर रहे भूमिका-आधारित अनुमतियां प्राप्त करने का प्रयास कर रहा हूं।Google ऐप इंजन

बॉक्स में से, यह काम नहीं कर रहा था, शायद उपयोगकर्ताओं और समूहों के बीच कई से अधिक रिश्ते के कारण, इसलिए मैंने http://www.fhahn.com/writing/Django-s-Permission-System-with-Django-Nonrel पाया और स्थापित किया। प्रलेखन के अनुसार, मैंने INSTALLED_APPS (djangotoolbox के बाद) में allow_backend_nonrel जोड़ा, और सेटिंग.py में उपयुक्त वर्ग में AUTHENTICATION_BACKENDS को परिभाषित किया।

यह मुझे पहले की समस्या से पहले ("डेटाबेस त्रुटि: यह क्वेरी डेटाबेस द्वारा समर्थित नहीं है।"), लेकिन मैं अभी भी अटक गया हूं क्योंकि जब मैं एक बहुत ही सरल नमूना चलाता हूं, तो मुझे अनुमतियों का खाली सेट मिलता है मेरा मानना ​​है कि मुझे कुछ वापस मिलना चाहिए। नीचे जैसा कि मैं कर सकता था उतना सरल उदाहरण है। यह python manage.py खोल द्वारा django ढांचे में लॉन्च किया गया है - यह एक साधारण टट्टू की दुकान है। मैं एक समूह में कोई उपयोगकर्ता जोड़ने, उस समूह नियंत्रण दिया जाएगा, और फिर देखते हैं उन अनुमतियों अनुमतियों के सेट उपयोगकर्ता है के भाग के रूप परिलक्षित करने के लिए कोशिश कर रहा हूँ:

>>> from django.contrib.auth.models import Group, Permission, User 
>>> from django.contrib.contenttypes.models import ContentType 
>>> from pony_shop.models import Pony 

#Create the group: 
>>> farmers = Group(name="Farmers") 
>>> farmers.save() 

>>> pony_ct = ContentType.objects.get(app_label='pony_shop', model='pony') 

#Create the Permission 
>>> can_twirl = Permission(name='Can Twirl', codename='can_twirl', content_type=pony_ct) 
>>> can_twirl.save() 

#Give the Permission to the Group 
>>> farmers.permissions.add(can_twirl) 
>>> farmers.save() 

#Create the User 
>>> francis = User(username='francis') 
>>> francis.save() 

#Put the user in the group 
>>> francis.groups.add(farmers) 
>>> francis.save() 

#Get a pony object 
>>> firefly = Pony(price=12, height=3, name='Firefly', color='fuscia') 
>>> firefly.save() 

>>> francis.get_all_permissions() 
set([]) #<-- WHY?!? 

#Just in case I needed to check the permissions against a pony object: 
>>> francis.get_all_permissions(obj=firefly) 
set([]) #<-- Still no joy 

तो, सवाल यह है: क्यों नहीं करता ' उपर्युक्त काम नहीं है, और इसे काम करने के लिए मुझे क्या बदलने की ज़रूरत है?

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

6

एक सहयोगी के लिए धन्यवाद, मुझे इसका जवाब मिला। जाहिर है, मुझे अंतर्निहित समूह/अनुमति जोड़ों का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, उपयोगिता वर्ग का उपयोग करें जो * allow_backend_nonrel *

>>>from permission_backend_nonrel import utils 
>>>utils.add_permission_to_group(can_twirl,farmers) 
>>>utils.add_user_to_group(francis,farmers) 

फिर, यह काम करता है।

1

जांच करने के लिए एक उपयोगकर्ता एक समूह मैं प्रयोग कर रहे हैं अगले समारोह:

from django.contrib.auth.models import User, Group 
from permission_backend_nonrel.models import UserPermissionList 

def UserInGroup(User, groupName): 
    group = Group.objects.get(name=groupName) 
    up = UserPermissionList.objects.filter(user = User) 
    try: 
     return True if unicode(group.id) in up[0].group_fk_list else False 
    except: 
     return False 
0

मैं एक ही समस्या थी, लेकिन मैं AUTHENTICATION_BACKENDS सेटिंग में आदेश को बदलने के द्वारा हल किया। अनुमति बैकएंड नॉनेल मॉडलबैकेंड से पहले होना चाहिए।

AUTHENTICATION_BACKENDS = (
    'permission_backend_nonrel.backends.NonrelPermissionBackend', 
    'django.contrib.auth.backends.ModelBackend', 
)