api.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. self.space_id = None if current_user.role == SUPER else session['space_id']
  60. # @login_required
  61. def get(self, *args, **kwargs):
  62. self.action = 'get'
  63. return self.validator()
  64. # @login_required
  65. def delete(self, *args, **kwargs):
  66. self.action = 'delete'
  67. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  68. if not is_allow:
  69. self.render_json(code=403, message='无操作权限')
  70. # abort(403)
  71. pass
  72. pass
  73. # @login_required
  74. def put(self, *args, **kwargs):
  75. self.action = 'put'
  76. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  77. if not is_allow:
  78. self.render_json(code=403, message='无操作权限')
  79. # abort(403)
  80. pass
  81. pass
  82. # @login_required
  83. def post(self, *args, **kwargs):
  84. """
  85. # @login_required
  86. :param args:
  87. :param kwargs:
  88. :return:
  89. """
  90. self.action = 'post'
  91. return self.validator()
  92. def validator(self):
  93. if not AccessRbac.is_login():
  94. return self.render_json(code=1000, message='请先登录')
  95. if not AccessRbac.is_allow(action=self.action, controller=self.controller):
  96. return self.render_json(code=1001, message='无操作权限')
  97. @staticmethod
  98. def is_super(func):
  99. @wraps(func)
  100. def is_enable(*args, **kwargs):
  101. if current_user.role_info.name != 'super':
  102. return ApiResource.render_json(code=403, message='无操作权限')
  103. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  104. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  105. return func(*args, **kwargs)
  106. return is_enable
  107. @staticmethod
  108. def is_master(func):
  109. @wraps(func)
  110. def is_enable(*args, **kwargs):
  111. if current_user.role_info.name not in ['super', 'master']:
  112. return ApiResource.render_json(code=403, message='无操作权限')
  113. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  114. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  115. return func(*args, **kwargs)
  116. return is_enable
  117. class Base(Resource):
  118. def get(self):
  119. """
  120. fetch role list or one role
  121. :return:
  122. """
  123. return 'walle-web 2.0'