Django管理员忽略has_delete_permission

时间:2018-05-17 16:23:54

标签: python django

我在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

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

1 个答案:

答案 0 :(得分:0)

还有一个用户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)