我想要创建一个权限(或实现相同功能的东西),它可以任意应用于所有用户,包括超级用户。
我可以很容易地创建一个自定义权限:
ct = ContentType.objects.get_for_model(MyModel)
Permission.objects.create(
name='optional permission',
codename='optional_permission,
content_type=ct)
但是,这将始终为超级用户user.has_perm('my_app_label.optional_permission')
返回True
我的用例是:我想创建一个queryset管理器函数,它只为已应用optional_permission
的组中的用户返回文章草稿。我希望超级用户可以不看这些条款草案,如果他们愿意的话。
发布于 2020-10-23 12:33:02
最后,我不得不实现一个稍微难看的解决方案,所以我会有兴趣知道是否有人能做得更好。
我不得不在我们的用户模型上为超级用户添加一个覆盖布尔值。
class User(AbstractUser):
superuser_view_draft_override = models.BooleanField(
default=False, help_text='This allows us to toggle the \'see draft\' permission for superusers only')
@cached_property
def can_see_draft_content(self):
# Have to use the boolean override for superusers because they
# have all permissions turned on by default
if self.is_superuser:
return self.superuser_view_draft_override
# Otherwise use the permission...
return self.has_perm('my_app_label.optional_permission')
https://stackoverflow.com/questions/64487217
复制相似问题