0

我正在尝试使用 Django-guardian 将权限应用于特定的平面页面。我们的网站上有许多平面页面,在大多数情况下,django-auth 可以满足我们的需要。但是,我们希望为某些平面页面和特定用户添加对象级权限。

例如,我有一个用户YOUNGTEMP,我想授予该用户编辑网站上所有平面页面子集的权限。

我已经安装了 Django-guardian,并使用 shellchange_flatpage为该用户授予了相应站点的权限。这个用户根本没有其他权限,因为我不希望他们看到除了这个来自管理员的网站之外的任何东西。

我可以通过查看数据库来验证权限是否存在,以及当我以 SU 身份登录时它们是否出现在管理员中。为什么当我以该用户身份登录时,YOUNGTEMP管理站点会告诉我我没有编辑任何内容的权限?

我按照此处readthedocs.io 页面的摘录在 shell 中分配权限,以确保我的覆盖管理员没有问题,如下所示:

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

我卡住了,因为一切似乎都在工作,但仍然无法实现我的目的......

回复:@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