5

GAE の django-nonrel で機能する役割ベースのアクセス許可を取得しようとしています。

おそらく、Users と Groups の間の暗黙の多対多の関係が原因で、そのままでは機能しないように見えたので、http://www.fhahn.com/writing/Django-s-を見つけてインストールしました。 Django-Nonrel を使用した許可システム。ドキュメントに従って、(djangotoolbox の後) INSTALLED_APPS に permission_backend_nonrel を追加し、settings.py の適切なクラスに AUTHENTICATION_BACKENDS を定義しました。

これにより、以前の問題 (「DatabaseError: このクエリはデータベースでサポートされていません。」) を回避できますが、非常に単純なサンプルを実行すると、必要だと思われるときに空のアクセス許可のセットを取得するため、まだ立ち往生しています。何かを取り戻している。以下は、私ができる限り簡単な例です。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

問題は、上記が機能しないのはなぜで、機能させるには何を変更する必要があるのか​​ということです。

よろしくお願いします。

4

4 に答える 4

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)

次に、それは動作します。

于 2011-07-16T17:44:57.847 に答える
2

ああ、更新として、ここに新しいコードベースがあります: https://github.com/django-nonrel/django-permission-backend-nonrel

そして、指示もそこに含まれています:-)

于 2012-01-04T09:37:12.383 に答える
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
于 2012-05-24T20:16:55.490 に答える
0

私は同じ問題を抱えていましたが、AUTHENTICATION_BACKENDS 設定で順序を変更することで解決しました。パーミッション バックエンド nonrel は、ModelBackend の前にある必要があります。

AUTHENTICATION_BACKENDS = (
    'permission_backend_nonrel.backends.NonrelPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
)
于 2013-05-08T19:03:23.113 に答える