Skip to main content

django-oauth-usp-authz

Controle de acesso por lista de usuários autorizados para aplicações Django que utilizam django-oauth-usp.

Funcionalidades

  • Modelo UsuarioAutorizado — Lista de usuários autorizados a acessar o sistema
  • Backend OAuthUSPAuthzBackend — Verificação de autorização durante autenticação
  • Middleware OAuthUSPAuthzMiddleware — Verificação contínua de autorização a cada request
  • Admin integrado — Interface para gerenciar usuários autorizados (ativar/desativar)

Regras de negócio

  1. Superusuários locais sempre têm acesso — Não passam pela verificação de lista
  2. Usuários da USP precisam estar na lista — O número USP deve existir em UsuarioAutorizado com ativo=True
  3. Revogação imediata — Desativar um usuário na lista Admin faz ele perder acesso na próxima requisição, mesmo que já esteja logado

Instalação

pip install django-oauth-usp-authz

Configuração

Adicione django_oauth_usp_authz ao INSTALLED_APPS após django_oauth_usp.accounts:

INSTALLED_APPS = [
    ...
    'django_oauth_usp.accounts',
    'django_oauth_usp_authz',
    ...
]

Configure o backend de autenticação:

AUTHENTICATION_BACKENDS = [
    'django_oauth_usp_authz.backends.OAuthUSPAuthzBackend',
    'django.contrib.auth.backends.ModelBackend',
]

Configure o middleware após AuthenticationMiddleware:

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ...
    'django_oauth_usp_authz.middleware.OAuthUSPAuthzMiddleware',
    ...
]

Execute as migrations:

python manage.py migrate

Uso

Gerenciando usuários autorizados

Acesse o Django Admin em /admin/ e procure por "Usuários Autorizados".

Na listagem é possível:

  • Ativar/desativar usuários diretamente (coluna "Ativo")
  • Buscar por número USP ou observação
  • Filtrar por status (ativo/inativo)

Protegendo views

Todas as views que utilizam LoginRequiredMixin já estão protegidas:

from django.contrib.auth.mixins import LoginRequiredMixin

class MinhaView(LoginRequiredMixin, View):
    ...

Verificação manual

Para verificar se um usuário está autorizado:

from django_oauth_usp_authz.models import UsuarioAutorizado

def esta_autorizado(user):
    if user.is_superuser:
        return True
    return UsuarioAutorizado.objects.filter(
        numero_usp=user.login,
        ativo=True
    ).exists()

Como funciona

Fluxo de autenticação

1. Usuário acessa página protegida
   ↓
2. LoginRequiredMixin redireciona para login
   ↓
3. Usuário autentica via Senha Única USP
   ↓
4. django-oauth-usp cria/atualiza UserModel (campo login = número USP)
   ↓
5. OAuthUSPAuthzBackend verifica se está na lista de autorizados
   ↓
6. Se não estiver na lista → login bloqueado
   ↓
7. Se estiver na lista → sessão criada

Fluxo de verificação contínua

1. Usuário faz uma requisição
   ↓
2. OAuthUSPAuthzMiddleware verifica:
   - Se superusuário → segue normalmente
   - Se não-superusuário → verifica UsuarioAutorizado
   ↓
3. Se não estiver na lista ou inativo → logout + redirect para login
   ↓
4. Se estiver na lista e ativo → segue normalmente

Estrutura do modelo

class UsuarioAutorizado(models.Model):
    numero_usp = models.CharField(max_length=20, unique=True)
    ativo = models.BooleanField(default=True)
    observacao = models.TextField(blank=True, null=True)
    criado_em = models.DateTimeField(auto_now_add=True)
    atualizado_em = models.DateTimeField(auto_now=True)

Compatibilidade

  • Django >= 4.2
  • django-oauth-usp
  • Python >= 3.10

Licença

MIT

Release files for django-oauth-usp-authz 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-oauth-usp-authz 0.1.0
File Size Uploaded
django_oauth_usp_authz-0.1.0.tar.gz 5.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-oauth-usp-authz 0.1.0
File Interpreter ABI Platform
django_oauth_usp_authz-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.4 kB

Release files / django_oauth_usp_authz-0.1.0.tar.gz

Download URL django_oauth_usp_authz-0.1.0.tar.gz
Size 5.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f3d198c75a8b788852b5836cc427ff8a909b4194a3279eba6a968372f4d16ed8
BLAKE2b-256 checksum
How to use checksums
7423127443059eaacab0ede8251c82bd18be78196fa9f78d97837adbab7f4fde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release files / django_oauth_usp_authz-0.1.0-py3-none-any.whl

Download URL django_oauth_usp_authz-0.1.0-py3-none-any.whl
Size 7.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fcf207d8b519278494f12c20590e028e7624097caa9e80c3b5bb3de604c9fa92
BLAKE2b-256 checksum
How to use checksums
0884bda81849db619cc9b4d900075b0bcc2da199ccdddabb3b60a37a9030e9c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page