api.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-06-14 16:00:23
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from flask import jsonify, abort, current_app, request
  9. from flask_restful import Resource
  10. from walle.service.rbac.access import Access as AccessRbac
  11. from functools import wraps
  12. from walle.service.code import Code
  13. from flask import current_app, session
  14. from flask_login import current_user
  15. from walle.service.rbac.role import *
  16. class ApiResource(Resource):
  17. module = None
  18. controller = None
  19. actions = None
  20. action = None
  21. def __init__(self):
  22. pass
  23. @staticmethod
  24. def render_json(code=0, message='', data=[]):
  25. return ApiResource.json(code=code, message=message, data=data)
  26. @staticmethod
  27. def render_error(code=0, message='', data=[]):
  28. if code == Code.form_error:
  29. msg = ''
  30. for err_key in message:
  31. current_app.logger.info(err_key)
  32. current_app.logger.info('.'.join(message[err_key]))
  33. msg = msg + "%s: %s。 " % (err_key, '.'.join(message[err_key]))
  34. message = msg
  35. return ApiResource.json(code=code, message=message, data=data)
  36. @staticmethod
  37. def json(code=0, message=None, data=[]):
  38. if code and code not in Code.code_msg:
  39. current_app.logger.error('unknown code %s' % (code))
  40. if code in Code.code_msg and not message:
  41. message = Code.code_msg[code]
  42. return jsonify({
  43. 'code': code,
  44. 'message': message,
  45. 'data': data,
  46. })
  47. @staticmethod
  48. def list_json(list, count, table={}, code=0, message='', enable_create=False):
  49. return ApiResource.render_json(data={'list': list, 'count': count, 'table': table, 'enable_create': enable_create},
  50. code=code,
  51. message=message)
  52. class SecurityResource(ApiResource):
  53. module = None
  54. controller = None
  55. action = None
  56. space_id = None
  57. def __init__(self):
  58. if current_user.is_authenticated:
  59. current_user.fresh_session()
  60. self.space_id = None if current_user.role == SUPER else session['space_id']
  61. # @login_required
  62. def get(self, *args, **kwargs):
  63. self.action = 'get'
  64. return self.validator()
  65. # @login_required
  66. def delete(self, *args, **kwargs):
  67. self.action = 'delete'
  68. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  69. if not is_allow:
  70. self.render_json(code=403, message='无操作权限')
  71. # abort(403)
  72. pass
  73. pass
  74. # @login_required
  75. def put(self, *args, **kwargs):
  76. self.action = 'put'
  77. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  78. if not is_allow:
  79. self.render_json(code=403, message='无操作权限')
  80. # abort(403)
  81. pass
  82. pass
  83. # @login_required
  84. def post(self, *args, **kwargs):
  85. """
  86. # @login_required
  87. :param args:
  88. :param kwargs:
  89. :return:
  90. """
  91. self.action = 'post'
  92. return self.validator()
  93. def validator(self):
  94. if not AccessRbac.is_login():
  95. return self.render_json(code=1000, message='请先登录')
  96. if not AccessRbac.is_allow(action=self.action, controller=self.controller):
  97. return self.render_json(code=1001, message='无操作权限')
  98. @staticmethod
  99. def is_super(func):
  100. @wraps(func)
  101. def is_enable(*args, **kwargs):
  102. if current_user.role_info.name != 'super':
  103. return ApiResource.render_json(code=403, message='无操作权限')
  104. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  105. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  106. return func(*args, **kwargs)
  107. return is_enable
  108. @staticmethod
  109. def is_master(func):
  110. @wraps(func)
  111. def is_enable(*args, **kwargs):
  112. if current_user.role_info.name not in ['super', 'master']:
  113. return ApiResource.render_json(code=403, message='无操作权限')
  114. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  115. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  116. return func(*args, **kwargs)
  117. return is_enable
  118. class Base(Resource):
  119. def get(self):
  120. """
  121. fetch role list or one role
  122. :return:
  123. """
  124. return 'walle-web 2.0'