Pergunta

Estou criando um aplicativo de vários inquilinos que não usará nenhum dos Admin Django padrão (exceto para uso interno que terá acesso a todos os inquilinos ... isso é simples o suficiente). Estou tentando criar um sistema de autorização próprio e não estou interessado em usar o modelo de usuário padrão (ou qualquer modelo de aplicativo interno). Meu aplicativo terá contas e cada conta terá administradores (teve que usar o administrador versus o usuário para fins de lixo). Esses usuários se autenticarão usando meu próprio sistema completamente personalizado. Isso está tudo errado. Devo/ainda posso usar o sistema de autenticação do Django em uma situação com vários tenantes que usa minha própria interface personalizada (como mencionado antes de não permitir que os titulares de contas usem a interface de administrador padrão). Existem implicações de segurança no uso do meu próprio sistema ou nos elementos de segurança padrão do Django, como a prevenção de seqüestros de sessão, me protege?

Parece-me que muito Django é construído em torno da idéia de usar a interface do administrador e não criar software SaaS de vários inquilinos com seu próprio administrador. Estou pensando nisso tudo errado?

Foi útil?

Solução

Você definitivamente deve usar o Django Auth System, ele ainda faz 90% do que você precisa.

Eu construí o que se parece exatamente com o seu cenário em um projeto: contas corporativas, cada uma com usuário administrador e vários usuários regulares.

Aqui está a estrutura do modelo que usei:

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)

E alguns exemplos de aplicação de requisitos de autorização no nível de exibição com decoradores personalizados:

@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):
    # ...

Na verdade, usamos subdomínios para contas, então não havia necessidade de explícito account_id parâmetro.

É muito razoável usar interface personalizada para administradores de contas. A interface admin do Django destina-se apenas a usuários 100%cometidos, como administradores de sistema e equipe de suporte interno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top