使用Django-guardian和Flatpages仅为一个对象设置权限

时间:2017-11-03 23:35:26

标签: python django django-admin django-flatpages django-guardian

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

例如,我有一个用户YOUNGTEMP,我想让这个用户有权编辑我们在网站上的总平面页面的子集。

我已经安装了Django-guardian,并为这个用户使用了change_flatpage权限的shell用于相应的站点。这个用户完全没有其他权限,因为我不希望他们看到除管理员这个网站之外的任何内容。

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

我按照readthedocs.io页面here的摘录来分配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')
我坚持了,因为一切似乎都在起作用,但仍然无法实现我的目的......

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']}

0 个答案:

没有答案