flask многопользовательская аутентификация с несколькими таблицами

Мне нужна ваша помощь, пожалуйста, у меня в файле моделей есть 3 таблицы с 3 разными типами пользователей (администраторы, клиенты, компания), и каждый пользователь может иметь адрес электронной почты и пароль для аутентификации. Проблема в том, что когда пользователь создает счетчик в 2 таблицах, скажем, клиенты и компания, с одним и тем же адресом электронной почты, программа путается между счетом и выдает ошибку:

 - class Admin(UserMixin, db.Model):   
 - class Client(UserMixin, db.Model): 
 - class Company(UserMixin, db.Model):

Есть ли у вас какие-либо идеи об этой проблеме?


person Abdellah ALAOUI ISMAILI    schedule 25.05.2017    source источник
comment
Вы можете просто изменить разрешение ‹a href=stackoverflow.com/questions/47973490/ здесь, чтобы узнать больше‹/a›   -  person Abel Ashine    schedule 21.05.2021


Ответы (1)


Итак, это недостаток дизайна вашей базы данных. Разные типы пользователей не должны храниться в разных местах.

Вам необходимо определить модель, в которой тип пользователя определяется в базе данных. Затем вы можете создать методы в своем классе модели, чтобы оценить пользовательский класс и решить, как с ним обращаться.

Пример:

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(200), unique = True)
    password = db.Column(db.String(200))
    userType = db.Column(db.String(20), default = 'user') #can be user, client, admin or whatever your options are

    def isAdmin(self): #an example method - your admin view could use this method to check if a user should be given access
         if self.userType == 'admin':
             return True
         else:
             return False
person Callam Delaney    schedule 25.05.2017
comment
у меня похожая проблема, но только один из типов пользователей должен иметь внешний ключ к другим таблицам, как я могу это сделать? наследование ? - person BHA Bilel; 21.05.2020