5

我正在嘗試爲GAE獲得基於角色的權限,以便爲django-nonrel工作。如何在Django-Nonrel中爲Google App Engine創建組權限工作

開箱即用,可能是因爲用戶和組之間隱含的多對多關係,所以我找到並安裝了http://www.fhahn.com/writing/Django-s-Permission-System-with-Django-Nonrel。根據文檔,我將permission_backend_nonrel添加到INSTALLED_APPS(在djangotoolbox之後),並將AUTHENTICATION_BACKENDS定義到settings.py中的相應類。

這讓我超越了前面的問題(「DatabaseError:該查詢不受數據庫支持」),但我仍然陷入困境,因爲當我運行一個非常簡單的示例時,我得到一組空的權限我相信我應該得到回報。下面是我可以做的一個簡單的例子。它由python manage.py shell在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

感謝一位同事,我得到了答案。顯然,我需要不使用內置的組/權限添加。相反,使用* permission_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設置的順序解決。權限後端nonrel應該在ModelBackend之前。

AUTHENTICATION_BACKENDS = (
    'permission_backend_nonrel.backends.NonrelPermissionBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 
相關問題