space.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2019 walle-web.io
  5. :created time: 2018-11-25 16:01:41
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from datetime import datetime
  9. from sqlalchemy import String, Integer, DateTime
  10. from walle.model.database import SurrogatePK, db, Model
  11. from walle.model.user import UserModel
  12. from walle.service.extensions import permission
  13. from walle.service.rbac.role import *
  14. from walle import model
  15. # 项目配置表
  16. class SpaceModel(SurrogatePK, Model):
  17. # 表的名字:
  18. __tablename__ = 'spaces'
  19. current_time = datetime.now()
  20. status_close = 0
  21. status_open = 1
  22. # 表的结构:
  23. id = db.Column(Integer, primary_key=True, autoincrement=True)
  24. user_id = db.Column(Integer)
  25. name = db.Column(String(100))
  26. status = db.Column(Integer)
  27. created_at = db.Column(DateTime, default=current_time)
  28. updated_at = db.Column(DateTime, default=current_time, onupdate=current_time)
  29. def list(self, page=0, size=10, kw=None):
  30. """
  31. 获取分页列表
  32. :param page:
  33. :param size:
  34. :return:
  35. """
  36. query = self.query.filter(SpaceModel.status.notin_([self.status_remove]))
  37. if kw:
  38. query = query.filter(SpaceModel.name.like('%' + kw + '%'))
  39. # TODO 如果是超管,可以全量,否则需要过滤自己有权限的空间列表
  40. if current_user.role != SUPER:
  41. query = query.filter_by(user_id=current_user.id)
  42. count = query.count()
  43. data = query.order_by(SpaceModel.id.desc()).offset(int(size) * int(page)).limit(size).all()
  44. uid2name = UserModel.uid2name(data=data)
  45. list = [p.to_json(uid2name) for p in data]
  46. return list, count
  47. def item(self, id=None):
  48. """
  49. 获取单条记录
  50. :param role_id:
  51. :return:
  52. """
  53. MemberModel = model.member.MemberModel
  54. id = id if id else self.id
  55. data = self.query.filter_by(id=id).first()
  56. if not data:
  57. return []
  58. data = data.to_json()
  59. data['members'], count, user_ids = MemberModel(group_id=id).members()
  60. return data
  61. def add(self, *args, **kwargs):
  62. data = dict(*args)
  63. space = SpaceModel(**data)
  64. db.session.add(space)
  65. db.session.commit()
  66. self.id = space.id
  67. return self.id
  68. def update(self, *args, **kwargs):
  69. update_data = dict(*args)
  70. return super(SpaceModel, self).update(**update_data)
  71. def remove(self, space_id=None):
  72. """
  73. :param space_id:
  74. :return:
  75. """
  76. space_id = space_id if space_id else self.id
  77. SpaceModel.query.filter_by(id=space_id).update({'status': self.status_remove})
  78. ret = db.session.commit()
  79. return ret
  80. def to_json(self, uid2name=None):
  81. item = {
  82. 'id': self.id,
  83. 'user_id': self.user_id,
  84. 'user_name': uid2name[self.user_id] if uid2name and self.user_id in uid2name else '',
  85. 'name': self.name,
  86. 'status': self.status,
  87. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  88. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  89. }
  90. item.update(self.enable())
  91. return item
  92. def enable(self):
  93. return {
  94. 'enable_view': True,
  95. 'enable_update': permission.enable_uid(self.user_id) or permission.role_upper_owner(),
  96. 'enable_delete': permission.enable_uid(self.user_id) or permission.role_upper_owner(),
  97. 'enable_create': False,
  98. 'enable_online': False,
  99. 'enable_audit': False,
  100. 'enable_block': permission.role_upper_master(),
  101. }