我正在尝试使用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']}