【问题标题】:Maintain Two Types Of User维护两种用户
【发布时间】:2022-02-10 06:33:51
【问题描述】:

所以我有一个要求,我必须维护两种类型的用户。

  1. 一家公司及其所有用户,用于管理日常工作。还可以创建公共数据,例如显示一些项目和相关图像,并设置会议的可用性等等。

  2. 可以看到项目、图像的公共用户。并且可以预订会议。

现在对于第一种情况,每个用户都是通过官方电子邮件和密码创建的,作为来自 rest-framework 的 registeruser 端点。有用户资料和其他公司数据。

对于第二种类型的用户(公共),我必须授予社交登录以及通过电子邮件/手机登录(也许)的访问权限。

我很困惑如何以最好的方式配置它。公司数据很重要。

我应该在同一个数据库中创建两种用户类型(根据用户类型进行区分)吗?或者我应该使用单独的数据库然后如何从两个数据库中获取数据(从未这样做过)?还可以保护我的数据免受未经授权的访问。

或者有没有更好的方法来管理我完全不知道的所有需求?喜欢更好的方法。

寻求有经验的人的解释。 谢谢

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    也许您想要的是创建一个自定义用户模型(甚至保留默认模型)并实现对视图/资源的权限。这可以通过组来实现,例如,每个人都在其中的公共组(可以是公共组,甚至可以没有组)和私有组。

    一旦您可以区分您的用户,您就可以添加对资源及其子资源的引用到组(组上的外键)并稍后在您的视图中过滤必要的查询集。在某些视图中,您还可以通过权限限制某些端点。

    另一种方法是使用对象权限。 无论如何这里是资源:

    https://www.django-rest-framework.org/api-guide/permissions/(和 django-guardian 用于对象级权限)

    https://docs.djangoproject.com/en/4.0/topics/auth/default/#permissions-and-authorization

    另外,你可以看看它是如何在像 Sentry 这样的开源项目上实现的:https://github.com/getsentry/sentry/blob/master/src/sentry/api/endpoints/api_applications.py

    【讨论】:

    • 不知何故我不愿意在同一个数据库中实现这两个逻辑,你知道如何在数据库级别处理这个问题吗?顺便说一句,我知道自定义用户和权限,这种推荐的方式可能是我最后的选择。我在公司层面有很多用户组。
    • 你的意思是有两个独立的数据库来存储用户?好吧,您可以使用 django 拥有多个数据库,即使对于用户也是如此,但是您将有额外的逻辑来知道在哪里查询数据。
    • 我的研究表明,多个数据库不支持外键和多对多字段,(有一个 hack,但我没有这样做)。我们也不能在多个数据库中拥有用户,因为用户由设置文件管理。现在我将不得不在内部将数据从一个应用程序发送到另一个应用程序或使用上述逻辑。
    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多