89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
from ..extensions import db
|
|
from flask_security import UserMixin, RoleMixin
|
|
|
|
|
|
class Tenant(db.Model):
|
|
"""Tenant model"""
|
|
|
|
__bind_key__ = 'public'
|
|
__table_args__ = {'schema': 'public'}
|
|
|
|
# Versioning Information
|
|
created_at = db.Column(db.DateTime, nullable=False, server_default=db.func.now())
|
|
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.func.now(), onupdate=db.func.now())
|
|
|
|
# company Information
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
name = db.Column(db.String(80), unique=True, nullable=False)
|
|
website = db.Column(db.String(255), nullable=True)
|
|
|
|
# Licensing Information
|
|
license_start_date = db.Column(db.Date, nullable=True)
|
|
license_end_date = db.Column(db.Date, nullable=True)
|
|
allowed_monthly_interactions = db.Column(db.Integer, nullable=True)
|
|
|
|
# Relations
|
|
users = db.relationship('User', backref='tenant')
|
|
|
|
def __repr__(self):
|
|
return '<Tenant %r>' % self.name
|
|
|
|
|
|
class Role(db.Model, RoleMixin):
|
|
__bind_key__ = 'public'
|
|
__table_args__ = {'schema': 'public'}
|
|
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
name = db.Column(db.String(80), unique=True)
|
|
description = db.Column(db.String(255))
|
|
|
|
|
|
class RolesUsers(db.Model):
|
|
__bind_key__ = 'public'
|
|
__table_args__ = {'schema': 'public'}
|
|
|
|
user_id = db.Column(db.Integer(), db.ForeignKey('public.user.id', ondelete='CASCADE'), primary_key=True)
|
|
role_id = db.Column(db.Integer(), db.ForeignKey('public.role.id', ondelete='CASCADE'), primary_key=True)
|
|
|
|
|
|
class User(db.Model, UserMixin):
|
|
"""User model"""
|
|
|
|
__bind_key__ = 'public'
|
|
__table_args__ = {'schema': 'public'}
|
|
|
|
# Versioning Information
|
|
created_at = db.Column(db.DateTime, nullable=False, server_default=db.func.now())
|
|
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.func.now(), onupdate=db.func.now())
|
|
|
|
# User Information
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_name = db.Column(db.String(80), unique=True, nullable=False)
|
|
email = db.Column(db.String(255), unique=True, nullable=False)
|
|
password = db.Column(db.String(255), nullable=False)
|
|
first_name = db.Column(db.String(80), nullable=False)
|
|
last_name = db.Column(db.String(80), nullable=False)
|
|
is_active = db.Column(db.Boolean, default=True)
|
|
active = db.Column(db.Boolean)
|
|
fs_uniquifier = db.Column(db.String(255), unique=True, nullable=False)
|
|
confirmed_at = db.Column(db.DateTime, nullable=True)
|
|
valid_to = db.Column(db.Date, nullable=True)
|
|
|
|
# Security Trackable Information
|
|
last_login_at = db.Column(db.DateTime, nullable=True)
|
|
current_login_at = db.Column(db.DateTime, nullable=True)
|
|
last_login_ip = db.Column(db.String(255), nullable=True)
|
|
current_login_ip = db.Column(db.String(255), nullable=True)
|
|
login_count = db.Column(db.Integer, nullable=False, default=0)
|
|
|
|
# Relations
|
|
roles = db.relationship('Role', secondary=RolesUsers.__table__, backref=db.backref('users', lazy='dynamic'))
|
|
tenant_id = db.Column(db.Integer, db.ForeignKey('public.tenant.id'), nullable=False)
|
|
|
|
def __repr__(self):
|
|
return '<User %r>' % self.user_name
|
|
|
|
def has_roles(self, *args):
|
|
return any(role.name in args for role in self.roles)
|
|
|