【问题标题】:Django: Completely custom auth question. Please helpDjango:完全自定义的身份验证问题。请帮忙
【发布时间】:2011-01-18 12:04:57
【问题描述】:

我正在创建一个不使用任何标准 Django Admin 的多租户应用程序(内部使用除外,它可以访问所有租户......这很简单)。我正在尝试创建自己的授权系统,但我对使用标准用户模型(或任何内置应用程序的模型)不感兴趣。我的应用程序将有帐户,每个帐户都会有管理员(必须使用管理员与用户进行名称冲突)。这些用户将使用我自己的完全自定义系统进行身份验证。难道这一切都错了。我应该/我仍然可以在使用我自己的自定义界面的多租户情况下使用 Django 的身份验证系统(如前所述,我不会允许帐户持有人使用默认的管理界面)。使用我自己的系统是否存在安全隐患,或者 Django 的标准安全元素(如会话劫持预防)是否保护了我?

在我看来,很多 Django 都是围绕使用 Admin 界面的想法构建的,而不是使用您自己的 Admin 构建多租户 SAAS 软件。我是不是想错了?

【问题讨论】:

    标签: django django-admin django-authentication django-users


    【解决方案1】:

    您绝对应该使用 Django 身份验证系统,它仍然可以完成您需要的 90%。

    我在一个项目中构建了与您的场景完全相同的内容:公司帐户,每个帐户都有管理员用户和多个普通用户。

    这是我使用的模型结构:

    class Account(models.Model): # represents copporate customer
        admin = models.ForeignKey(User)
        # other fields ...
    
    class UserProfile(models.Model):
        user = models.ForeignKey(User)
        account = models.ForeignKey(Account)
    

    还有一些使用自定义装饰器在视图级别强制执行授权要求的示例:

    @account_access_required # request.user.get_profile().account == account
    def account_page(request, account_id):
        # ...
    
    @account_admin_required # request.user == account.admin
    def account_users(request, account_id):
        # ...
    

    我们实际上为帐户使用了子域,因此不需要显式的account_id 参数。

    为帐户管理员使用自定义界面是非常合理的。 Django 管理界面仅适用于 100% 受信任的用户,例如系统管理员和内部支持人员。

    【讨论】:

    • @Alex Lebedev 您如何以及在何处创建与 UserProfile 相关的用户对象?此外,您使用 User 对象的哪些属性(即,它有很多可用的属性,例如 first_name 等)。
    • User 取自 django 身份验证系统。您的问题已在其文档中得到解答:docs.djangoproject.com/en/1.1/topics/auth/#topics-auth
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多