我正在创建一个多租户应用程序,它不会使用任何标准的Django Admin(除了内部使用,它可以访问所有租户......这很简单)。我正在尝试创建自己的授权系统,我对使用标准用户模型(或任何内置应用程序的模型)不感兴趣。我的应用程序将拥有帐户,每个帐户都有管理员(必须使用管理员与用户进行名称冲突)。这些用户将使用我自己的完全自定义系统进行身份验证这都错了。应该/我是否仍然可以在使用我自己的自定义界面的多租户情况下使用Django的auth系统(如前所述,我不会允许帐户持有者使用默认的Admin界面)。使用我自己的系统是否存在安全隐患,或者Django的标准安全元素如会话劫持预防是否会保护我?
在我看来,很多Django都是围绕使用Admin界面而不是使用您自己的Admin构建多租户SAAS软件的想法而构建的。我觉得这一切都错了吗?
答案 0 :(得分:3)
你绝对应该使用Django auth系统,它仍然可以满足你所需要的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%受信任的用户,如系统管理员和内部支持人员。