group.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-25 11:15:01
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from flask_login import login_required, current_user
  9. from flask import request
  10. from walle.form.group import GroupForm
  11. from walle.model.user import MemberModel, UserModel
  12. from walle.model.user import SpaceModel
  13. from walle.model.tag import TagModel
  14. from walle.api.api import SecurityResource
  15. from flask import current_app
  16. from walle.service.rbac.role import *
  17. class GroupAPI(SecurityResource):
  18. def get(self, group_id=None):
  19. """
  20. 用户组列表
  21. /group/
  22. :return:
  23. """
  24. super(GroupAPI, self).get()
  25. return self.item(group_id) if group_id else self.list()
  26. def list(self):
  27. """
  28. 用户组列表
  29. /group/
  30. :return:
  31. """
  32. page = int(request.args.get('page', 0))
  33. page = page - 1 if page else 0
  34. size = float(request.args.get('size', 10))
  35. kw = request.values.get('kw', '')
  36. filter = {'name': {'like': kw}} if kw else {}
  37. space_model = SpaceModel()
  38. space_list, count = space_model.list(page=page, size=size, kw=kw)
  39. return self.list_json(list=space_list, count=count, enable_create=permission.enable_role(OWNER))
  40. group_model, count = SpaceModel().query_paginate(page=page, limit=size, filter_name_dict=filter)
  41. groups = []
  42. for group_info in group_model:
  43. group_sub = MemberModel.query \
  44. .filter_by(group_id=group_info.id) \
  45. .count()
  46. group_info = group_info.to_json()
  47. group_info['users'] = group_sub
  48. group_info['group_id'] = group_info['id']
  49. group_info['group_name'] = group_info['name']
  50. groups.append(group_info)
  51. return self.list_json(list=groups, count=count)
  52. def item(self, group_id):
  53. """
  54. 获取某个用户组
  55. /group/<int:group_id>
  56. :param group_id:
  57. :return:
  58. """
  59. ## sqlalchemy版本
  60. group_model = MemberModel()
  61. group = group_model.members(group_id=group_id)
  62. if group:
  63. return self.render_json(data=group)
  64. return self.render_json(code=-1)
  65. ## mixin 版本
  66. group_model = TagModel().get_by_id(group_id)
  67. if not group_model:
  68. return self.render_json(code=-1)
  69. user_model = UserModel()
  70. user_info = user_model.fetch_by_uid(uids=group_model.users)
  71. group_info = group_model.to_dict()
  72. group_info['members'] = user_info
  73. group_info['users'] = len(user_info)
  74. group_info['group_name'] = group_info['name']
  75. group_info['group_id'] = group_info['id']
  76. return self.render_json(data=group_info)
  77. def post(self):
  78. """
  79. create group
  80. /group/
  81. :return:
  82. """
  83. super(GroupAPI, self).post()
  84. current_app.logger.info(request.form)
  85. current_app.logger.info(request.form.user_ids)
  86. form = GroupForm(request.form, csrf_enabled=False)
  87. if form.validate_on_submit():
  88. # user_ids = [int(uid) for uid in form.user_ids.data.split(',')]
  89. group_id = 0
  90. # group_new = MemberModel()
  91. # group_id = group_new.add(group_name=form.group_name.data, user_ids=user_ids)
  92. if not group_id:
  93. return self.render_json(code=-1)
  94. return self.render_json(data=group_new.item())
  95. else:
  96. return self.render_json(code=-1, message=form.errors)
  97. def put(self, group_id):
  98. """
  99. update group
  100. /group/<int:group_id>
  101. :return:
  102. """
  103. super(GroupAPI, self).put()
  104. form = GroupForm(request.form, csrf_enabled=False)
  105. form.set_group_id(group_id)
  106. if form.validate_on_submit():
  107. # pass
  108. # user_ids = [int(uid) for uid in form.user_ids.data.split(',')]
  109. import json
  110. current_app.logger.info(form.uid_roles)
  111. current_app.logger.info(json.loads(form.uid_roles))
  112. group_model = MemberModel(group_id=group_id)
  113. for uid_role in json.loads(form.uid_roles):
  114. uid_role['project_id'] = 0
  115. current_app.logger.info(uid_role)
  116. group_model.create_or_update(uid_role, uid_role)
  117. # group_model.update(group_id=group_id,
  118. # group_name=form.group_name.data,
  119. # user_ids=user_ids)
  120. return self.render_json(data=group_model.item())
  121. return self.render_json(code=-1, message=form.errors)
  122. def delete(self, group_id):
  123. """
  124. /group/<int:group_id>
  125. :return:
  126. """
  127. super(GroupAPI, self).delete()
  128. group_model = MemberModel()
  129. tag_model = TagModel()
  130. tag_model.remove(group_id)
  131. group_model.remove(group_id)
  132. return self.render_json(message='')