0003_forums_roles.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.db import models, migrations
  4. from django.utils.translation import ugettext as _
  5. from misago.core import serializer
  6. def pickle_permissions(role, permissions):
  7. role.pickled_permissions = serializer.dumps(permissions)
  8. def create_default_forums_roles(apps, schema_editor):
  9. """
  10. Crete roles
  11. """
  12. ForumRole = apps.get_model('misago_forums', 'ForumRole')
  13. see_only = ForumRole(name=_('See only'))
  14. pickle_permissions(see_only,
  15. {
  16. # forums perms
  17. 'misago.forums.permissions': {
  18. 'can_see': 1,
  19. 'can_browse': 0,
  20. },
  21. })
  22. see_only.save()
  23. read_only = ForumRole(name=_('Read only'))
  24. pickle_permissions(read_only,
  25. {
  26. # forums perms
  27. 'misago.forums.permissions': {
  28. 'can_see': 1,
  29. 'can_browse': 1,
  30. },
  31. # threads perms
  32. 'misago.threads.permissions': {
  33. 'can_see_all_threads': 1,
  34. },
  35. })
  36. read_only.save()
  37. reply_only = ForumRole(name=_('Reply to threads'))
  38. pickle_permissions(reply_only,
  39. {
  40. # forums perms
  41. 'misago.forums.permissions': {
  42. 'can_see': 1,
  43. 'can_browse': 1,
  44. },
  45. # threads perms
  46. 'misago.threads.permissions': {
  47. 'can_see_all_threads': 1,
  48. 'can_reply_threads': 1,
  49. 'can_edit_posts': 1,
  50. },
  51. })
  52. reply_only.save()
  53. standard = ForumRole(name=_('Start and reply threads'))
  54. pickle_permissions(standard,
  55. {
  56. # forums perms
  57. 'misago.forums.permissions': {
  58. 'can_see': 1,
  59. 'can_browse': 1,
  60. },
  61. # threads perms
  62. 'misago.threads.permissions': {
  63. 'can_see_all_threads': 1,
  64. 'can_start_threads': 1,
  65. 'can_reply_threads': 1,
  66. 'can_edit_threads': 1,
  67. 'can_edit_posts': 1,
  68. },
  69. })
  70. standard.save()
  71. standard_with_polls = ForumRole(
  72. name=_('Start and reply threads, make polls'))
  73. pickle_permissions(standard_with_polls,
  74. {
  75. # forums perms
  76. 'misago.forums.permissions': {
  77. 'can_see': 1,
  78. 'can_browse': 1,
  79. },
  80. # threads perms
  81. 'misago.threads.permissions': {
  82. 'can_see_all_threads': 1,
  83. 'can_start_threads': 1,
  84. 'can_reply_threads': 1,
  85. 'can_edit_threads': 1,
  86. 'can_edit_posts': 1,
  87. },
  88. })
  89. standard_with_polls.save()
  90. moderator = ForumRole(name=_('Moderator'))
  91. pickle_permissions(moderator,
  92. {
  93. # forums perms
  94. 'misago.forums.permissions': {
  95. 'can_see': 1,
  96. 'can_browse': 1,
  97. },
  98. # threads perms
  99. 'misago.threads.permissions': {
  100. 'can_see_all_threads': 1,
  101. 'can_start_threads': 1,
  102. 'can_reply_threads': 1,
  103. 'can_edit_threads': 2,
  104. 'can_edit_posts': 2,
  105. 'can_hide_own_threads': 2,
  106. 'can_hide_own_posts': 2,
  107. 'thread_edit_time': 0,
  108. 'post_edit_time': 0,
  109. 'can_hide_threads': 2,
  110. 'can_hide_posts': 2,
  111. 'can_protect_posts': 1,
  112. 'can_move_posts': 1,
  113. 'can_merge_posts': 1,
  114. 'can_change_threads_labels': 2,
  115. 'can_pin_threads': 1,
  116. 'can_close_threads': 1,
  117. 'can_move_threads': 1,
  118. 'can_merge_threads': 1,
  119. 'can_review_moderated_content': 1,
  120. 'can_report_content': 1,
  121. 'can_see_reports': 1,
  122. 'can_hide_events': 2,
  123. },
  124. })
  125. moderator.save()
  126. """
  127. Assign forum roles to roles
  128. """
  129. Forum = apps.get_model('misago_forums', 'Forum')
  130. Role = apps.get_model('misago_acl', 'Role')
  131. RoleForumACL = apps.get_model('misago_forums', 'RoleForumACL')
  132. moderators = Role.objects.get(name=_('Moderator'))
  133. members = Role.objects.get(special_role='authenticated')
  134. guests = Role.objects.get(special_role='anonymous')
  135. category = Forum.objects.filter(level__gt=0).get(role='category')
  136. forum = Forum.objects.filter(level__gt=0).get(role='forum')
  137. redirect = Forum.objects.filter(level__gt=0).get(role='redirect')
  138. RoleForumACL.objects.bulk_create([
  139. RoleForumACL(role=moderators, forum=category, forum_role=moderator),
  140. RoleForumACL(role=moderators, forum=forum, forum_role=moderator),
  141. RoleForumACL(role=moderators, forum=redirect, forum_role=moderator),
  142. RoleForumACL(role=members, forum=category, forum_role=standard),
  143. RoleForumACL(role=members, forum=forum, forum_role=standard),
  144. RoleForumACL(role=members, forum=redirect, forum_role=standard),
  145. RoleForumACL(role=guests, forum=category, forum_role=read_only),
  146. RoleForumACL(role=guests, forum=forum, forum_role=read_only),
  147. RoleForumACL(role=guests, forum=redirect, forum_role=read_only),
  148. ])
  149. class Migration(migrations.Migration):
  150. dependencies = [
  151. ('misago_forums', '0002_default_forums'),
  152. ('misago_acl', '0003_default_roles'),
  153. ]
  154. operations = [
  155. migrations.RunPython(create_default_forums_roles),
  156. ]