首页 > 解决方案 > 在没有 Django 用户的情况下使用 django 权限系统

问题描述

我想构建一个类似于 jitsi 的应用程序。所以人们可以在没有注册或登录的情况下加入房间(django 频道)。虽然这应该是可选的支持。

在一个房间里,我需要“用户”。它们具有名称和权限。例如,第一个加入的人应该在“管理员组”中,并且可以踢其他用户。

所以我的想法是为每个“websocket 连接”创建一个用户并将其与房间相关联。因此,我创建了自己的 Django 用户。

class RoomUser(AbstractBaseUser, PermissionsMixin):
    """
    A custom user model for rooms to allow using built in permission handling
    """
    channelName = models.CharField(
        max_length=255,
        help_text="Reply channel for connection that is present"
    )

    userName = models.CharField(
        max_length=255, help_text="Free choosen user name"
    )

    USERNAME_FIELD = 'channelName'
    REQUIRED_FIELDS = ['userName']

    objects = RoomUserManager()

    def __str__(self):
        return self.channelName

问题是我收到这些错误消息auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' 与 reverse accessor for 'UserManage.groups' 冲突

基本上,这也是文档所说的,我应该设置 AUTH_USER_MODEL,所以它用我的自定义用户替换了 django 用户。

但这不是我想要的。我不想替换默认用户模型(我可能想将真实登录添加到我的网站)。

这里的问题似乎是 django 用户更像是一个帐户,您通常拥有一个而不是多个帐户。

就我而言,这些不是帐户,而是更多的临时用户。所以我不确定 django 用户是否真的可以用于我的用例。

有没有办法只重用权限系统(与组和everyhing)没有“帐户”相关的东西,如登录,授权,应该在不同的地方处理?

谢谢!

标签: djangodjango-modelsdjango-channels

解决方案


推荐阅读