api.py 4.0 KB

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