permission.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: permission.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-07-16 16:40:53 (CST)
  9. # Last Update:星期六 2016-7-30 22:2:39 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (redirect, url_for, flash, request, jsonify, g)
  14. from flask_login import login_required, current_user
  15. from maple.permission.base import RestBase
  16. from maple.permission.permission import EditTopicNeed
  17. from flask_principal import Permission, RoleNeed
  18. from flask_babelex import gettext as _
  19. from functools import wraps
  20. from .models import Topic
  21. def ask_permission(func):
  22. @wraps(func)
  23. def decorator(*args, **kwargs):
  24. permission = Permission(RoleNeed('confirmed'))
  25. if not permission.can():
  26. flash(
  27. _("You haven't confirm your account,Please confirmed"),
  28. 'warning')
  29. return redirect(url_for('user.user',
  30. user_url=current_user.username))
  31. return func(*args, **kwargs)
  32. return decorator
  33. def edit_permission(func):
  34. @wraps(func)
  35. def decorator(*args, **kwargs):
  36. topicId = kwargs.get('topicId')
  37. topic = Topic.query.filter_by(uid=topicId).first_or_404()
  38. permission = Permission(EditTopicNeed(topic.id))
  39. if not permission.can():
  40. flash(_('You have no permission'), 'warning')
  41. return redirect(url_for('topic.topic', topicId=topicId))
  42. return func(*args, **kwargs)
  43. return decorator
  44. def vote_permission(func):
  45. @wraps(func)
  46. def decorator(*args, **kwargs):
  47. if not g.user.is_authenticated:
  48. topicId = kwargs.get('topicId')
  49. return jsonify(judge=False,
  50. url=url_for('auth.login',
  51. next=url_for('topic.topic',
  52. topicId=topicId)))
  53. return func(*args, **kwargs)
  54. return decorator
  55. class TopicPermission(RestBase):
  56. def get(self, topicId):
  57. order = request.args.get('orderby')
  58. if topicId is None:
  59. if order:
  60. return True
  61. else:
  62. if order and order not in ['time', 'like']:
  63. return True
  64. @login_required
  65. def post(self):
  66. def callback():
  67. flash(
  68. _("You haven't confirm your account,Please confirmed"),
  69. 'warning')
  70. return redirect(url_for('user.user',
  71. user_url=current_user.username))
  72. permission = Permission(RoleNeed('confirmed'))
  73. if not permission.can():
  74. self.callback = callback
  75. return True
  76. @login_required
  77. @edit_permission
  78. def put(self, topicId):
  79. def callback():
  80. return jsonify(judge=False, error=_('You have no permission'))
  81. topic = Topic.query.filter_by(uid=topicId).first_or_404()
  82. permission = Permission(EditTopicNeed(topic.id))
  83. if not permission.can():
  84. self.callback = callback
  85. return True
  86. @login_required
  87. def delete(self, topicId):
  88. return True
  89. class ReplyPermission(RestBase):
  90. decorators = [login_required]
  91. def post(self, topicId):
  92. permission = Permission(RoleNeed('confirmed'))
  93. if not permission.can():
  94. return True
  95. def callback(self):
  96. flash(
  97. _("You haven't confirm your account,Please confirmed"), 'warning')
  98. return redirect(url_for('user.user', user_url=current_user.username))
  99. preview_permission = ask_permission
  100. topic_permission = TopicPermission()
  101. reply_permission = ReplyPermission()