__init__.py 2.7 KB
from sqlalchemy import  Column, Integer, Text, Time, ForeignKey, DateTime
from app.models import db
from authlib.integrations.sqla_oauth2 import (
    OAuth2ClientMixin,
    OAuth2TokenMixin,
    OAuth2AuthorizationCodeMixin
)
from sqlalchemy.orm import relationship
from app.util.enum.AuthEnum import OriginEnum,UserStatusEnum


class User (db.Model):
    '''
    用户信息表
    '''
    __tablename__ = "dmap_user"
    id = Column(Integer, primary_key=True)
    username = Column(Text)
    password = Column(Text)
    company = Column(Text)
    position = Column(Text)
    phone = Column(Text)
    email = Column(Text)
    create_time = Column(DateTime)
    update_time = Column(DateTime)
    role = Column(Text)
    displayname = Column(Text, nullable=True)  # 昵称
    # 用户来源,默认dmap平台用户
    origin = Column(Text, default=OriginEnum.Dmap.name.lower())
    status = Column(Integer, default=UserStatusEnum.Active)  # 1:激活,2:冻结,0:注销

    def __str__(self):
        return self.username

    def get_user_id(self):
        return self.id


class OAuth2Client(db.Model, OAuth2ClientMixin):
    __tablename__ = 'dmap_oauth2_client'

    id = Column(Integer, primary_key=True)
    user_id = Column(
        Integer, ForeignKey('dmap_user.id', ondelete='CASCADE'))
    user = relationship('User')

    def get_default_redirect_uri(self):
        if self.redirect_uris:
            return self.redirect_uris[0]

    def check_redirect_uri(self, redirect_uri):
        return redirect_uri in self.redirect_uris


class OAuth2AuthorizationCode(db.Model, OAuth2AuthorizationCodeMixin):
    __tablename__ = 'dmap_oauth2_code'

    id = Column(Integer, primary_key=True)
    user_id = Column(
        Integer, ForeignKey('dmap_user.id', ondelete='CASCADE'))
    user = relationship('User')


class OAuth2Token(db.Model, OAuth2TokenMixin):
    __tablename__ = 'dmap_oauth2_token'

    id = Column(Integer, primary_key=True)
    user_id = Column(
        Integer, ForeignKey('dmap_user.id', ondelete='CASCADE'))
    # name = Column(Text)
    user = relationship('User')


'''
认证日志
'''

# 认证日志


class OAuthLog(db.Model):
    __tablename__ = "dmap_oauth_log"

    id = Column(Integer, primary_key=True)
    user_id = Column(Text, nullable=False)
    username = Column(Text)  # 用户输入账号
    displayname=Column(Text) # 昵称
    ip = Column(Text)
    # 登录方式:password,三方登录
    auth_type = Column(Text)
    message = Column(Text)  # 登录返回提示
    create_time = Column(DateTime)  # 记录创建时间
    operate_type = Column(Integer, nullable=False)  # 操作类型,登录,注销
    token = Column(Text)