限制对 Django 管理面板中模型的编辑访问权限

问题描述 投票:0回答:1

这是我的模型

class Profile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    first_name = models.CharField(_('نام'), max_length=255)
    last_name = models.CharField(_('نام خانوادگی'),max_length=255)
    image = models.ImageField(_('تصویر'),null=True, blank=True)
    description = models.TextField(_('توضیحات'),)
    created_date = jmodels.jDateTimeField(_('تاریخ ایجاد'), auto_now_add=True)
    updated_date = jmodels.jDateTimeField(_('تاریخ آخرین به روز رسانی'),auto_now=True)
    
    USERNAME_FIELD = 'user'
    REQUIRED_FIELDS = [] 

    def __str__(self) -> str:
        return self.user.email

    class Meta:
        ordering = ['-updated_date']
        verbose_name = 'پروفایل'
        verbose_name_plural = 'پروفایل ها'

@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

在管理面板中,我只希望个人资料所有者和超级用户有权编辑该个人资料

我不知道我应该在哪里以及做什么改变

python django django-models django-admin
1个回答
0
投票

要实现对象级权限,我建议您查看 Django Guardian,特别是管理集成

ModelAdmin

 模型设置 
Profile
 类,如下所示:

from django.contrib import admin

from app_name.models import Profile

from guardian.admin import GuardedModelAdmin

class ProfileAdmin(GuardedModelAdmin):
    # Configuration done here
    pass

admin.site.register(Profile, ProfileAdmin)

然后更新您的

save_profile
信号以向用户分配编辑权限,请记住模型的 默认编辑权限
<app_name>.change_profile

from guardian.shortcuts import assign_perm

@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
    if created:
        profile_obj = Profile.objects.create(user=instance)
        assign_perm("<app_name>.change_profile", instance, profile_obj)

查看 Django Guardian 文档,了解有关如何分配权限的更多详细信息。

由于默认情况下超级用户被授予所有权限,因此无需进行任何其他更改即可允许超级用户编辑

Profile
记录。

© www.soinside.com 2019 - 2024. All rights reserved.