models.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. # *************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: articledb.py
  4. # Author:JiangLin
  5. # Mail:xiyang0807@gmail.com
  6. # Created Time: 2015-11-29 02:07:53
  7. # *************************************************************************
  8. # !/usr/bin/env python
  9. # -*- coding=UTF-8 -*-
  10. from maple import db
  11. from datetime import datetime
  12. from flask_login import UserMixin
  13. from werkzeug.security import generate_password_hash, \
  14. check_password_hash
  15. ROLES = [('super', 'super'), ('admin', 'admin'),
  16. ('member', 'member'), ('unconfirmed', 'unconfirmed'),
  17. ('visitor', 'visitor')]
  18. class Permission(db.Model):
  19. '''
  20. admin_manager:admin_post,admin_edit,admin_read,admin_delete
  21. que_manager:que_post,que_edit,que_read,que_delete
  22. rep_manager:rep_post,rep_edit,rep_read,rep_delete
  23. own_manager:update_password,update_infor,own_read
  24. '''
  25. __tablename__ = 'permission'
  26. id = db.Column(db.Integer, primary_key=True)
  27. percode = db.Column(db.String(81), nullable=False)
  28. pername = db.Column(db.String(81), nullable=False)
  29. description = db.Column(db.String(255), nullable=True)
  30. module_id = db.Column(db.Integer,
  31. db.ForeignKey('modules.id',
  32. ondelete="CASCADE"))
  33. module = db.relationship('Module',
  34. backref=db.backref('permission',
  35. cascade='all,delete-orphan',
  36. lazy='dynamic'))
  37. roles = db.relationship('Role',
  38. secondary='role_permission',
  39. backref=db.backref('permission',
  40. lazy='dynamic'))
  41. class Module(db.Model):
  42. '''
  43. 后台管理:admin_manager
  44. 问题管理:que_manager
  45. 回复管理:rep_manager
  46. 个人管理:own_manager
  47. '''
  48. __tablename__ = 'modules'
  49. id = db.Column(db.Integer, primary_key=True)
  50. modulecode = db.Column(db.String(81), unique=True)
  51. modulename = db.Column(db.String(81), unique=True)
  52. parentcode = db.Column(db.String(81), nullable=True)
  53. moduleurl = db.Column(db.String(81), nullable=True)
  54. class UserRole(db.Model):
  55. __tablename__ = 'user_role'
  56. id = db.Column(db.Integer, primary_key=True)
  57. user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  58. roles_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  59. class RolePermission(db.Model):
  60. __tablename__ = 'role_permission'
  61. id = db.Column(db.Integer, primary_key=True)
  62. role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  63. permission_id = db.Column(db.Integer, db.ForeignKey('permission.id'))
  64. class Role(db.Model):
  65. '''
  66. super
  67. admin
  68. member
  69. banned
  70. unconfirmed
  71. guest
  72. group_admin
  73. board_admin
  74. '''
  75. __tablename__ = 'roles'
  76. id = db.Column(db.Integer, primary_key=True)
  77. name = db.Column(db.String(81), nullable=False,default='unconfirmed')
  78. description = db.Column(db.String(255), nullable=True)
  79. rank = db.Column(db.Integer,nullable=False,default=1)
  80. users = db.relationship('User',
  81. secondary='user_role',
  82. backref=db.backref('roles',
  83. lazy='dynamic'))
  84. __mapper_args__ = {"order_by": rank.desc()}
  85. class UserInfor(db.Model):
  86. __tablename__ = 'userinfor'
  87. id = db.Column(db.Integer, primary_key=True)
  88. confirmed_time = db.Column(db.DateTime, nullable=True)
  89. registered_time = db.Column(db.DateTime, nullable=False)
  90. score = db.Column(db.Integer, nullable=False, default=100)
  91. word = db.Column(db.Text, nullable=True)
  92. introduce = db.Column(db.Text, nullable=True)
  93. school = db.Column(db.String, nullable=True)
  94. count_id = db.Column(db.Integer,
  95. db.ForeignKey('counts.id',
  96. ondelete="CASCADE"))
  97. count = db.relationship("Counts",
  98. backref="user",
  99. cascade='all,delete-orphan',
  100. single_parent=True,
  101. uselist=False)
  102. def __init__(self):
  103. self.registered_time = datetime.now()
  104. def __repr__(self):
  105. return "<UserInfor %r>" % self.id
  106. class UserSetting(db.Model):
  107. '''
  108. 1:all user
  109. 2:logined user
  110. 3:only own
  111. '''
  112. __tablename__ = 'usersetting'
  113. id = db.Column(db.Integer, primary_key=True)
  114. online_status = db.Column(db.Integer, nullable=False, default=1)
  115. topic_list = db.Column(db.Integer, nullable=False, default=1)
  116. rep_list = db.Column(db.Integer, nullable=False, default=1)
  117. ntb_list = db.Column(db.Integer, nullable=False, default=3)
  118. collect_list = db.Column(db.Integer, nullable=False, default=2)
  119. def __repr__(self):
  120. return "<UserSetting %r>" % self.id
  121. class User(db.Model, UserMixin):
  122. __tablename__ = 'users'
  123. id = db.Column(db.Integer, primary_key=True, )
  124. name = db.Column(db.String, unique=True)
  125. email = db.Column(db.String, unique=True)
  126. passwd = db.Column(db.String, nullable=False)
  127. # roles = db.Column(db.String, nullable=False, default='visitor')
  128. is_superuser = db.Column(db.Boolean, default=False)
  129. is_confirmed = db.Column(db.Boolean, nullable=False, default=False)
  130. setting_id = db.Column(db.Integer,
  131. db.ForeignKey('usersetting.id',
  132. ondelete="CASCADE"))
  133. setting = db.relationship("UserSetting",
  134. backref="users",
  135. cascade='all,delete',
  136. uselist=False)
  137. infor_id = db.Column(db.Integer,
  138. db.ForeignKey('userinfor.id',
  139. ondelete="CASCADE"))
  140. infor = db.relationship("UserInfor",
  141. backref="users",
  142. cascade='all,delete',
  143. uselist=False)
  144. def __init__(self, name, email, passwd):
  145. self.name = name
  146. self.email = email
  147. self.passwd = self.set_password(passwd)
  148. def set_password(self, password):
  149. self.pw_hash = generate_password_hash(password)
  150. return self.pw_hash
  151. def is_authenticated(self):
  152. return True
  153. def is_active(self):
  154. return True
  155. def is_anonymous(self):
  156. return False
  157. def get_auth_token(self):
  158. from maple import login_serializer
  159. data = [self.name, self.passwd]
  160. return login_serializer.dumps(data)
  161. def __repr__(self):
  162. return "<User %r>" % self.name
  163. @staticmethod
  164. def load_by_id(uid):
  165. user = User.query.filter_by(id=uid).first()
  166. return user
  167. @staticmethod
  168. def load_by_name(name):
  169. user = User.query.filter_by(name=name).first()
  170. return user
  171. @staticmethod
  172. def load_by_email(email):
  173. user = User.query.filter_by(email=email).first()
  174. return user
  175. @staticmethod
  176. def check_password(user_password, password):
  177. return check_password_hash(user_password, password)