0

Django-guardian を使用して、特定のフラットページにアクセス許可を適用しようとしています。私たちのサイトには多くのフラットページがあり、ほとんどの場合、django-auth は必要なものに対して機能します。ただし、一部のフラットページと特定のユーザーにオブジェクト レベルのアクセス許可を追加したいと考えています。

たとえば、ユーザーYOUNGTEMPがいて、このユーザーに、サイトにあるフラットページ全体のサブセットを編集するアクセス権を与えたいとします。

Django-guardian をインストールし、シェルを使用change_flatpageして、適切なサイトに対してこのユーザーに許可を与えました。このユーザーには、管理者からこの1つのサイト以外は何も見せたくないので、他の権限はまったくありません。

DB を見て、権限が存在することと、SU としてログインしたときに権限が管理者に表示されることを確認できます。では、なぜこのユーザーとしてログインするとYOUNGTEMP、管理サイトから編集権限がないと言われるのでしょうか?

ここの readthedocs.io ページからの抜粋に従って、シェルでアクセス許可を割り当て、オーバーライドされた管理者に問題がないことを確認しました。これは次のようになります。

imports*...

class FlatPageForm(FlatPageFormOld):
    content = forms.CharField(widget=CKEditorUploadingWidget())
    class Meta:
        model = FlatPage
        fields = '__all__'

class FlatPageCustomAdmin(GuardedModelAdmin):
    form = FlatPageForm
    list_display = ('url', 'title')
    search_fields = ('url', 'title')

すべてが機能しているように見えますが、それでも私の目的を達成するために機能しません...

re:@solarissmoke のリクエスト:

$ python manage.py shell
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.flatpages.models import FlatPage
>>> from django.contrib.auth.models import User
>>> from guardian.shortcuts import assign_perm, get_users_with_perms
>>> user = User.objects.all().filter(id=758)
>>> print(user[0])
epss_student_worker  
>>> page_i_want_to_give_perms_for = FlatPage.objects.all().filter(id=27)
>>> print(page_i_want_to_give_perms_for[0])
/people/alumniawardwinners/ -- Student Alumni Award Winners
>>> assign_perm('change_flatpage', user[0], page_i_want_to_give_perms_for[0])
<UserObjectPermission: /people/alumniawardwinners/ -- Student Alumni Award Winners | epss_student_worker | change_flatpage>

の結果get_users_with_perms >>> get_users_with_perms(page_i_want_to_give_perms_for[0],attach_perms=True) {<User: epss_student_worker>: [u'change_flatpage']}

4

0 に答える 0