permission.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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-25 19:57:23 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import (redirect, url_for, flash, request)
  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. class TopicPermission(RestBase):
  21. def get(self, topicId):
  22. order = request.args.get('orderby')
  23. if topicId is None:
  24. if order:
  25. return True
  26. else:
  27. if order and order not in ['time', 'like']:
  28. return True
  29. @login_required
  30. def post(self):
  31. def callback():
  32. flash(
  33. _("You haven't confirm your account,Please confirmed"),
  34. 'warning')
  35. return redirect(url_for('user.user',
  36. user_url=current_user.username))
  37. permission = Permission(RoleNeed('confirmed'))
  38. if not permission.can():
  39. self.callback = callback
  40. return True
  41. @login_required
  42. def put(self, topicId):
  43. def callback():
  44. flash(_("You have no permission"), 'warning')
  45. return redirect(url_for('topic.topic', topicId=topicId))
  46. permission = Permission(EditTopicNeed(topicId))
  47. if not permission.can():
  48. self.callback = callback
  49. return True
  50. @login_required
  51. def delete(self, topicId):
  52. return True
  53. class ReplyPermission(RestBase):
  54. decorators = [login_required]
  55. def post(self, topicId):
  56. permission = Permission(RoleNeed('confirmed'))
  57. if not permission.can():
  58. return True
  59. def callback(self):
  60. flash(
  61. _("You haven't confirm your account,Please confirmed"),
  62. 'warning')
  63. return redirect(url_for('user.user', user_url=current_user.username))
  64. def ask_permission(func):
  65. @wraps(func)
  66. def decorator(*args, **kwargs):
  67. permission = Permission(RoleNeed('confirmed'))
  68. if not permission.can():
  69. flash(
  70. _("You haven't confirm your account,Please confirmed"),
  71. 'warning')
  72. return redirect(url_for('user.user',
  73. user_url=current_user.username))
  74. return func(*args, **kwargs)
  75. return decorator
  76. preview_permission = ask_permission
  77. topic_permission = TopicPermission()
  78. reply_permission = ReplyPermission()