Guest User

Untitled

a guest
Jan 23rd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. class Role(db.Model):
  2. __tablename__ = "roles"
  3. id = db.Column(db.Integer,primary_key=True)
  4. name = db.Column(db.String(10))
  5. default = db.Column(db.Boolean,default=False,index=True)
  6. permissions = db.Column(db.Integer)
  7. users = db.relationship('User',backref='role',lazy='dynamic')
  8.  
  9. def __init__(self,**kw):
  10. super(Role,self).__init__(**kw)
  11. if self.permissions is None:
  12. self.permissions = 0
  13.  
  14. # 判断是否含有权限
  15. def has_permission(self,perm):
  16. return self.permissions & perm == perm
  17.  
  18. # 添加权限
  19. def add_permission(self,perm):
  20. if not self.has_permission(perm):
  21. self.permissions += perm
  22. # 移除权限
  23. def remove_permission(self,perm):
  24. if self.has_permission(perm):
  25. self.permissions -= perm
  26.  
  27. # 重置权限
  28. def reset_permission(self):
  29. self.permissions = 0
  30.  
  31. # 插入角色
  32. @staticmethod
  33. def insert_roles():
  34. roles = {
  35. "User":[
  36. Permission.FOLLOW,
  37. Permission.COMMENT,
  38. Permission.WRITE,
  39. ],
  40. "Moderator":[
  41. Permission.MODERATE
  42. ],
  43. "ADMIN":[
  44. Permission.FOLLOW,
  45. Permission.COMMENT,
  46. Permission.WRITE,
  47. Permission.MODERATE,
  48. Permission.ADMIN,
  49. ]
  50. }
  51. # 默认角色是用户
  52. default_role = 'User'
  53. for r in roles:
  54. # 搜索三种角色,在数据库表的存在
  55. role = Role.query.filter_by(name=r).first()
  56. # 如果不存在这种角色,马上添加进去,方便以后拓展
  57. if role is None:
  58. role = Role(name=r)
  59.  
  60. # 重置权限
  61. role.reset_permission()
  62. for perm in roles[r]:
  63. # 权限重新一个个加进去
  64. role.add_permission(perm)
  65.  
  66. # 将默认用户写进数据库
  67. role.default = (role.name == default_role)
  68. db.session.add(role)
  69.  
  70. db.session.commit()
  71.  
  72. class Permission:
  73. FOLLOW = 1
  74. COMMENT = 2
  75. WRITE = 4
  76. MODERATE = 8
  77. ADMIN = 16
Add Comment
Please, Sign In to add comment