【发布时间】:2011-07-10 05:46:09
【问题描述】:
我目前正在编写一个站点,它使用django-guardian 分配整个站点使用的对象级权限。
这是所需的功能:
我希望用户有权编辑单个对象(或多个对象)。例如,如果有一个名为“Joe”的用户和一个名为“Partyline”的模型,我可能会授予“Joe”对 3 个特定“Partyline”对象的“change_partyline”的特定权限。
当 Joe 登录 Django 管理面板时,我希望他能够只编辑他的 3 个特定的“Partyline”对象,因为这些是他唯一有权编辑的东西。
这是当前的功能:
我可以将 Joe change_partyline 权限分配给 3 个 Partyline 对象——没问题。乔可以很好地登录管理面板。问题在于,由于 Joe 没有更改所有派对线路的“全局”权限,因此管理面板说他没有任何权限,并且不会让他编辑任何内容。我想找到一种方法让管理员认识到 Joe 有权编辑 3 个特定对象,并让他只查看和编辑他有权处理的那些对象。
我很想找到一种方法来完成这项工作。我现在广泛使用管理员来让我的用户管理事情,如果必须将某些功能从管理员移到网站上的其他区域,那真的会破坏演示。
如果您有任何建议,请告诉我!
作为参考,以下是一些 shell 输出,表明用户对 Partyline 对象具有 change_partyline 权限:
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(id=2)
>>> from apps.partylines.models import Partyline
>>> p = Partyline.objects.get(id=3)
>>> u.has_perm('partylines.change_partyline', p)
True
这是我的 partylines.admin 模块(它显示了 Partyline 模块是如何在管理员中填充的):
from django.contrib import admin
from guardian.admin import GuardedModelAdmin
from apps.partylines.models import Partyline
class PartylineAdmin(GuardedModelAdmin):
list_display = ('did', 'name', 'listed')
ordering = ('did',)
search_fields = ('did', 'name')
admin.site.register(Partyline, PartylineAdmin)
【问题讨论】:
标签: python django django-admin django-authentication