【问题标题】:Django admin ignores has_delete_permissionDjango 管理员忽略 has_delete_permission
【发布时间】:2018-10-28 00:10:46
【问题描述】:

我在 Django 1.11.13 上有一个简单的项目,它使用普通的 Django 管理模块。在允许的情况下,员工用户不能删除对象(has_delete_permission 始终返回 true)。

models.py:

class MyModel(models.Model):
    name = models.IntegerField("Value", blank=True, null=True)

admin.py:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return True

    def has_change_permission(self, request, obj=None):
        return True

    def has_delete_permission(self, request, obj=None):
        return True

我创建了用户并登录。他可以创建 MyModel 对象(如预期),可以编辑(如预期),但不能删除!!

如果我尝试删除它,我会看到:

删除选定的我的模型将导致删除相关的 对象,但您的帐户无权删除 以下类型的对象:

my model

我做错了什么?我应该如何将删除 MyModels 的权限授予普通员工用户?

【问题讨论】:

    标签: python django


    【解决方案1】:

    还有一个用户has_perm 正在进行检查,它将返回 False,因为权限没有以正常方式处理。你可以在它周围使用 MonkeyType,在我的情况下,检查用户是否是员工并且是活跃的,但你可以始终关闭 return True

    def override_user_has_perm(self, *args):
        return self.is_staff and self.is_active
    
    User.add_to_class('has_perm', override_user_has_perm)
    

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2023-03-11
      • 2018-12-09
      • 2011-12-20
      • 2020-01-09
      • 2010-10-12
      相关资源
      最近更新 更多