Я хочу создать приложение с двумя типами пользователей
Обычные пользователи, которые будут входить в приложение и использовать его
Администратор Пользователи, которые будут входить в приложение для управления ресурсами
Я знаю, я мог бы просто сделать поле is_staff, чтобы различать, является ли пользователь администратором или нет, но дело в том, что .... Обычный пользователь вообще не должен иметь пароль, он будет зарегистрирован через facebook / google api, но пользователям с правами администратора нужен пароль, и они не могут войти через свои учетные записи google.
Итак, я создал модель пользователя, подобную этой
""" User model."""
# Django
from django.db import models
from django.contrib.auth.models import AbstractUser
# Utilities
from api.utils.models import BaseModel
class User(BaseModel, AbstractUser):
""" User model. """
email = models.EmailField(
'email address',
unique=True,
error_messages={
'unique': 'A user with that email already exists.'
}
)
facebook_id = models.CharField(blank=True, max_length=255)
google_id = models.CharField(blank=True, max_length=255)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
db_table = 'users'
def __str__(self):
""" Return email"""
return self.email
def get_short_name(self):
""" Return email"""
return self.email
Теперь я сделал нечто подобное для Пользователь Admin
""" Admin User model."""
# Django
from django.db import models
from django.contrib.auth.models import AbstractUser
# Utilities
from api.utils.models import BaseModel
class Admin(BaseModel, AbstractUser):
""" Admin model. """
email = models.EmailField(
'email address',
unique=True,
error_messages={
'unique': 'A admin with that email already exists.'
}
)
password = models.CharField(max_length=255)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['password']
class Meta:
db_table = 'admin_users'
def __str__(self):
""" Return email"""
return self.email
def get_short_name(self):
""" Return email"""
return self.email
в основном то же самое, но с паролем вместо facebook_id / google_id
Теперь я хочу знать, прежде чем идти дальше, возможно ли это или я просто собираюсь sh к стене? Есть ли лучший способ сделать это? также, как я мог управлять аутентификацией в этом случае?