class Role(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, unique=True) default = db.Column(db.Boolean, default=False) permissions = db.Column(db.Integer) users = db.relationship("User", backref="role", lazy="dynamic") def __repr__(self): return "<Role {name}>".format(name=self.name) @staticmethod def insert_roles(): roles = { "User": (Permission.FOLLOW | Permission.COMMENT | Permission.WRITE_ARTICLES, True), "Moderator": (Permission.FOLLOW | Permission.COMMENT | Permission.WRITE_ARTICLES | Permission.MODERATE_COMMENTS, False), "Administrator": (Permission.ALL, False) } for r in roles: role = Role.query.filter_by(name=r).first() if role is None: role = Role(name=r) role.permissions = roles[r][0] role.default = roles[r][1] db.session.add(role) db.session.commit()
class Location(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) street = db.Column(db.String) city = db.Column(db.String) state = db.Column(db.String) zip = db.Column(db.String) country = db.Column(db.String)
class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, unique=True) email = db.Column(db.String(), unique=True) role_id = db.Column(db.Integer, db.ForeignKey("role.id")) password_hash = db.Column(db.String(128)) confirmed = db.Column(db.Boolean, default=False) def __init__(self, **kwargs): super(User, self).__init__(**kwargs) if self.role is None: if self.email == current_app.config["FLASKY_ADMIN"]: self.role = Role.query.filter_by(permissions=Permission.ALL).first() if self.role is None: self.role = Role.query.filter_by(default=True).first() def __repr__(self): return "<User {name}>".format(name=self.name) @property def password(self): raise AttributeError("password is not a readable attribute") @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def verify_password(self, password): return check_password_hash(self.password_hash, password) def generate_confirmation_token(self, expiration=3600): s = Serializer(current_app.config["SECRET_KEY"], expiration) return s.dumps({"confirm": self.id}) def confirm(self, token): s = Serializer(current_app.config["SECRET_KEY"]) try: data = s.loads(token) except: return False if data.get("confirm") != self.id: return False self.confirmed = True db.session.add(self) db.session.commit() return True def can(self, activities): return self.role is not None and (self.role.permissions & activities) == activities @property def is_administrator(self): return self.can(Permission.ADMINISTER)
class Release(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String) product_id = db.Column(db.Integer, db.ForeignKey("product.id")) product = db.relationship("Product") territory_id = db.Column(db.Integer, db.ForeignKey("territory.id")) territory = db.relationship("Territory") publisher_id = db.Column(db.Integer, db.ForeignKey("company.id")) publisher = db.relationship("Company") date = db.Column(db.Date())
class Product(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, unique=True) developer_id = db.Column(db.Integer, db.ForeignKey("company.id")) developer = db.relationship("Company")
class Company(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, unique=True) location_id = db.Column(db.Integer, db.ForeignKey("location.id")) location = db.relationship("Location")
class Territory(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, unique=True)