api.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. # TODO 权限验证
  22. def __init__(self):
  23. pass
  24. @staticmethod
  25. def render_json(code=0, message='', data=[]):
  26. return ApiResource.json(code=code, message=message, data=data)
  27. @staticmethod
  28. def json(code=0, message=None, data=[]):
  29. if code not in Code.code_msg:
  30. current_app.logger.error('unkown code %s' % (code))
  31. if code in Code.code_msg and not message:
  32. message = Code.code_msg[code]
  33. return jsonify({
  34. 'code': code,
  35. 'message': message,
  36. 'data': data,
  37. })
  38. @staticmethod
  39. def list_json(list, count, table={}, code=0, message='', enable_create=False):
  40. return ApiResource.render_json(data={'list': list, 'count': count, 'table': table, 'enable_create': enable_create},
  41. code=code,
  42. message=message)
  43. class SecurityResource(ApiResource):
  44. module = None
  45. controller = None
  46. action = None
  47. space_id = None
  48. def __init__(self):
  49. if current_user.is_authenticated:
  50. self.space_id = None if current_user.role == SUPER else session['space_id']
  51. # @login_required
  52. def get(self, *args, **kwargs):
  53. self.action = 'get'
  54. current_app.logger.info('========= SecurityResource =======')
  55. return self.validator()
  56. # @login_required
  57. def delete(self, *args, **kwargs):
  58. self.action = 'delete'
  59. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  60. if not is_allow:
  61. self.render_json(code=403, message=u'无操作权限')
  62. # abort(403)
  63. pass
  64. pass
  65. # @login_required
  66. def put(self, *args, **kwargs):
  67. self.action = 'put'
  68. is_allow = AccessRbac.is_allow(action=self.action, controller=self.controller)
  69. if not is_allow:
  70. self.render_json(code=403, message=u'无操作权限')
  71. # abort(403)
  72. pass
  73. pass
  74. # @login_required
  75. def post(self, *args, **kwargs):
  76. """
  77. # @login_required
  78. :param args:
  79. :param kwargs:
  80. :return:
  81. """
  82. self.action = 'post'
  83. return self.validator()
  84. def validator(self):
  85. if not AccessRbac.is_login():
  86. return self.render_json(code=1000, message=u'请先登录')
  87. if not AccessRbac.is_allow(action=self.action, controller=self.controller):
  88. return self.render_json(code=1001, message=u'无操作权限')
  89. @staticmethod
  90. def is_super(func):
  91. @wraps(func)
  92. def is_enable(*args, **kwargs):
  93. if current_user.role_info.name != 'super':
  94. return ApiResource.render_json(code=403, message=u'无操作权限')
  95. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  96. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  97. return func(*args, **kwargs)
  98. return is_enable
  99. @staticmethod
  100. def is_master(func):
  101. @wraps(func)
  102. def is_enable(*args, **kwargs):
  103. if current_user.role_info.name not in ['super', 'master']:
  104. return ApiResource.render_json(code=403, message=u'无操作权限')
  105. current_app.logger.info("user is login: %s" % (current_user.is_authenticated))
  106. current_app.logger.info("args: %s kwargs: %s" % (args, kwargs))
  107. return func(*args, **kwargs)
  108. return is_enable
  109. class Base(Resource):
  110. def get(self):
  111. """
  112. fetch role list or one role
  113. :return:
  114. """
  115. return 'walle-web 2.0'