0003_forums_roles.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. import base64
  6. try:
  7. import cPickle as pickle
  8. except ImportError:
  9. import pickle
  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. 'can_see': True,
  23. 'can_browse': False,
  24. })
  25. see_only.save()
  26. read_only = ForumRole(name=_('Read only'))
  27. pickle_permissions(read_only,
  28. {
  29. # forums perms
  30. 'can_see': True,
  31. 'can_browse': True,
  32. })
  33. read_only.save()
  34. reply_only = ForumRole(name=_('Reply to threads'))
  35. pickle_permissions(reply_only,
  36. {
  37. # forums perms
  38. 'can_see': True,
  39. 'can_browse': True,
  40. })
  41. reply_only.save()
  42. standard = ForumRole(name=_('Start and reply threads'))
  43. pickle_permissions(standard,
  44. {
  45. # forums perms
  46. 'can_see': True,
  47. 'can_browse': True,
  48. })
  49. standard.save()
  50. standard_with_polls = ForumRole(
  51. name=_('Start and reply threads, make pols'))
  52. pickle_permissions(standard_with_polls,
  53. {
  54. # forums perms
  55. 'can_see': True,
  56. 'can_browse': True,
  57. })
  58. standard_with_polls.save()
  59. moderator = ForumRole(name=_('Moderator'))
  60. pickle_permissions(moderator,
  61. {
  62. # forums perms
  63. 'can_see': True,
  64. 'can_browse': True,
  65. })
  66. moderator.save()
  67. """
  68. Assign forum roles to roles
  69. """
  70. Forum = apps.get_model('misago_forums', 'Forum')
  71. Role = apps.get_model('misago_acl', 'Role')
  72. RoleForumACL = apps.get_model('misago_forums', 'RoleForumACL')
  73. moderators = Role.objects.get(name=_('Moderator'))
  74. members = Role.objects.get(special_role='authenticated')
  75. guests = Role.objects.get(special_role='anonymous')
  76. category = Forum.objects.filter(level__gt=0).get(role='category')
  77. forum = Forum.objects.filter(level__gt=0).get(role='forum')
  78. redirect = Forum.objects.filter(level__gt=0).get(role='redirect')
  79. RoleForumACL.objects.bulk_create([
  80. RoleForumACL(role=moderators, forum=category, forum_role=moderator),
  81. RoleForumACL(role=moderators, forum=forum, forum_role=moderator),
  82. RoleForumACL(role=moderators, forum=redirect, forum_role=moderator),
  83. RoleForumACL(role=members, forum=category, forum_role=standard),
  84. RoleForumACL(role=members, forum=forum, forum_role=standard),
  85. RoleForumACL(role=members, forum=redirect, forum_role=standard),
  86. RoleForumACL(role=guests, forum=category, forum_role=read_only),
  87. RoleForumACL(role=guests, forum=forum, forum_role=read_only),
  88. RoleForumACL(role=guests, forum=redirect, forum_role=read_only),
  89. ])
  90. class Migration(migrations.Migration):
  91. dependencies = [
  92. ('misago_forums', '0002_default_forums'),
  93. ('misago_acl', '0003_default_roles'),
  94. ]
  95. operations = [
  96. migrations.RunPython(create_default_forums_roles),
  97. ]