0003_forums_roles.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import base64
  4. try:
  5. import cPickle as pickle
  6. except ImportError:
  7. import pickle
  8. from django.db import models, migrations
  9. from django.utils.translation import ugettext as _
  10. def pickle_permissions(role, permissions):
  11. role.pickled_permissions = base64.encodestring(
  12. pickle.dumps(permissions, pickle.HIGHEST_PROTOCOL))
  13. def create_default_forums_roles(apps, schema_editor):
  14. """
  15. Crete roles
  16. """
  17. ForumRole = apps.get_model('misago_forums', 'ForumRole')
  18. see_only = ForumRole(name=_('See only'))
  19. pickle_permissions(see_only,
  20. {
  21. # forums perms
  22. 'misago.forums.permissions': {
  23. 'can_see': 1,
  24. 'can_browse': 0,
  25. },
  26. })
  27. see_only.save()
  28. read_only = ForumRole(name=_('Read only'))
  29. pickle_permissions(read_only,
  30. {
  31. # forums perms
  32. 'misago.forums.permissions': {
  33. 'can_see': 1,
  34. 'can_browse': 1,
  35. },
  36. })
  37. read_only.save()
  38. reply_only = ForumRole(name=_('Reply to threads'))
  39. pickle_permissions(reply_only,
  40. {
  41. # forums perms
  42. 'misago.forums.permissions': {
  43. 'can_see': 1,
  44. 'can_browse': 1,
  45. },
  46. })
  47. reply_only.save()
  48. standard = ForumRole(name=_('Start and reply threads'))
  49. pickle_permissions(standard,
  50. {
  51. # forums perms
  52. 'misago.forums.permissions': {
  53. 'can_see': 1,
  54. 'can_browse': 1,
  55. },
  56. })
  57. standard.save()
  58. standard_with_polls = ForumRole(
  59. name=_('Start and reply threads, make pols'))
  60. pickle_permissions(standard_with_polls,
  61. {
  62. # forums perms
  63. 'misago.forums.permissions': {
  64. 'can_see': 1,
  65. 'can_browse': 1,
  66. },
  67. })
  68. standard_with_polls.save()
  69. moderator = ForumRole(name=_('Moderator'))
  70. pickle_permissions(moderator,
  71. {
  72. # forums perms
  73. 'misago.forums.permissions': {
  74. 'can_see': 1,
  75. 'can_browse': 1,
  76. },
  77. })
  78. moderator.save()
  79. """
  80. Assign forum roles to roles
  81. """
  82. Forum = apps.get_model('misago_forums', 'Forum')
  83. Role = apps.get_model('misago_acl', 'Role')
  84. RoleForumACL = apps.get_model('misago_forums', 'RoleForumACL')
  85. moderators = Role.objects.get(name=_('Moderator'))
  86. members = Role.objects.get(special_role='authenticated')
  87. guests = Role.objects.get(special_role='anonymous')
  88. category = Forum.objects.filter(level__gt=0).get(role='category')
  89. forum = Forum.objects.filter(level__gt=0).get(role='forum')
  90. redirect = Forum.objects.filter(level__gt=0).get(role='redirect')
  91. RoleForumACL.objects.bulk_create([
  92. RoleForumACL(role=moderators, forum=category, forum_role=moderator),
  93. RoleForumACL(role=moderators, forum=forum, forum_role=moderator),
  94. RoleForumACL(role=moderators, forum=redirect, forum_role=moderator),
  95. RoleForumACL(role=members, forum=category, forum_role=standard),
  96. RoleForumACL(role=members, forum=forum, forum_role=standard),
  97. RoleForumACL(role=members, forum=redirect, forum_role=standard),
  98. RoleForumACL(role=guests, forum=category, forum_role=read_only),
  99. RoleForumACL(role=guests, forum=forum, forum_role=read_only),
  100. RoleForumACL(role=guests, forum=redirect, forum_role=read_only),
  101. ])
  102. class Migration(migrations.Migration):
  103. dependencies = [
  104. ('misago_forums', '0002_default_forums'),
  105. ('misago_acl', '0003_default_roles'),
  106. ]
  107. operations = [
  108. migrations.RunPython(create_default_forums_roles),
  109. ]