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
- Superusuários locais sempre têm acesso — Não passam pela verificação de lista
- Usuários da USP precisam estar na lista — O número USP deve existir em
UsuarioAutorizadocomativo=True - 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)
| File | Size | Uploaded | |
|---|---|---|---|
| django_oauth_usp_authz-0.1.0.tar.gz | 5.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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