5

GAE için django-nonrel için çalışan rol tabanlı izinler almaya çalışıyorum.Grup izinleri Google App Engine için Django-nonrel'de nasıl çalışır?

Kutunun dışında, büyük olasılıkla Kullanıcılar ve Gruplar arasındaki örtük çoktan çoğa ilişkisi nedeniyle işe yaramadı, dolayısıyla http://www.fhahn.com/writing/Django-s-Permission-System-with-Django-Nonrel'u buldum ve yükledim. Dokümantasyon başına, INSTALLED_APPS (djangotoolbox'tan sonra) için allow_backend_nonrel ekledim ve AUTHENTICATION_BACKENDS öğesini settings.py dosyasındaki uygun sınıfa ekledim.

Bu, önceki soruna neden oluyor ("DatabaseError: Bu sorgu veritabanı tarafından desteklenmiyor."), Ancak hala çok basit bir örnek çalıştırdığımda takılıyorum; Sanırım geri bir şey almalıyım. Aşağıda, yapabileceğim kadar basit bir örnek var. Python manage.py kabuk tarafından django çerçevesinde başlatıldı - bu basit bir midilli dükkanı. Ben bir gruba kullanıcı eklemek grup izinlerini vermek ve daha sonra bu izinler, kullanıcının sahip olduğu izinler kapsamında yansıyan görmeye çalışıyorum: Yani

>>> 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 

, soru şudur: 'Neden hiç Yukarıdaki iş, ve çalışmasını sağlamak için neye ihtiyacım var?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

6

Bir meslektaşım sayesinde, bunun cevabını aldım. Görünüşe göre, yerleşik grup/izin eklerini kullanmam gerekiyordu. Bunun yerine, * allow_backend_nonrel *

ile birlikte gelen yardımcı sınıfı kullanın.

1

kontrol etmek için bir sonraki fonksiyonu:

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

ben aynı problem vardı, ama AUTHENTICATION_BACKENDS ortamda sırasını değiştirerek çözdü. İzin arka ucu nonrel ModelBackend önce olmalıdır.

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