gpt4 book ai didi

python - 如何允许在 Django Admin 中仅针对特定对象进行对象编辑?

转载 作者:行者123 更新时间:2023-11-28 21:29:38 30 4
gpt4 key购买 nike

我目前正在编写一个使用 django-guardian 的网站分配在整个站点中使用的对象级权限。

这是所需的功能:

我希望用户有权编辑单个对象(或多个对象)。例如,如果有一个名为“Joe”的用户和一个名为“Partyline”的模型,我可能会为“Joe”授予 3 个特定“Partyline”对象的“change_partyline”特定权限。

当 Joe 登录到 Django 管理面板时,我希望他只能编辑他的 3 个特定“Partyline”对象,因为这些是他唯一有权编辑的内容。

这是当前的功能:

我可以将 Joe change_partyline 权限分配给 3 个 Partyline 对象——没问题。 Joe 可以正常登录管理面板。问题是,由于 Joe 没有更改所有 partylines 的“全局”权限,管理面板说他没有任何权限,并且不允许他编辑任何内容。我想找到一种方法让管理员认识到 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)

最佳答案

我向 Lukazs(监护人的作者)提出了类似的问题,他告诉我该功能将在未来的版本中推出(请参阅 this commitrelated issue 上的 user_can_access_owned_objects_only 属性)。如果你不愿意等待,也许你可以直接在 master 分支上安装源。

您是否考虑过在您的模型上覆盖查询集?在我的例子中就足够了:

# models.py
from django.db import models
from django.contrib.auth import models as auth_models

class MagazineUser(models.Model):
user = models.ForeignKey(auth_models.User, unique=True)

class Magazine(models.Model):
managers = models.ForeignKey(MagazineUser)

# admin.py

class MagazineAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(admin.ModelAdmin, self).queryset(request)

if request.user.is_superuser:
return qs

user_qs = MagazineUser.objects.filter(user=request.user)
return qs.filter(managers__in=user_qs)

关于python - 如何允许在 Django Admin 中仅针对特定对象进行对象编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218110/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com