0003_forums_roles.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. })
  32. read_only.save()
  33. reply_only = ForumRole(name=_('Reply to threads'))
  34. pickle_permissions(reply_only,
  35. {
  36. # forums perms
  37. 'misago.forums.permissions': {
  38. 'can_see': 1,
  39. 'can_browse': 1,
  40. },
  41. })
  42. reply_only.save()
  43. standard = ForumRole(name=_('Start and reply threads'))
  44. pickle_permissions(standard,
  45. {
  46. # forums perms
  47. 'misago.forums.permissions': {
  48. 'can_see': 1,
  49. 'can_browse': 1,
  50. },
  51. })
  52. standard.save()
  53. standard_with_polls = ForumRole(
  54. name=_('Start and reply threads, make pols'))
  55. pickle_permissions(standard_with_polls,
  56. {
  57. # forums perms
  58. 'misago.forums.permissions': {
  59. 'can_see': 1,
  60. 'can_browse': 1,
  61. },
  62. })
  63. standard_with_polls.save()
  64. moderator = ForumRole(name=_('Moderator'))
  65. pickle_permissions(moderator,
  66. {
  67. # forums perms
  68. 'misago.forums.permissions': {
  69. 'can_see': 1,
  70. 'can_browse': 1,
  71. },
  72. })
  73. moderator.save()
  74. """
  75. Assign forum roles to roles
  76. """
  77. Forum = apps.get_model('misago_forums', 'Forum')
  78. Role = apps.get_model('misago_acl', 'Role')
  79. RoleForumACL = apps.get_model('misago_forums', 'RoleForumACL')
  80. moderators = Role.objects.get(name=_('Moderator'))
  81. members = Role.objects.get(special_role='authenticated')
  82. guests = Role.objects.get(special_role='anonymous')
  83. category = Forum.objects.filter(level__gt=0).get(role='category')
  84. forum = Forum.objects.filter(level__gt=0).get(role='forum')
  85. redirect = Forum.objects.filter(level__gt=0).get(role='redirect')
  86. RoleForumACL.objects.bulk_create([
  87. RoleForumACL(role=moderators, forum=category, forum_role=moderator),
  88. RoleForumACL(role=moderators, forum=forum, forum_role=moderator),
  89. RoleForumACL(role=moderators, forum=redirect, forum_role=moderator),
  90. RoleForumACL(role=members, forum=category, forum_role=standard),
  91. RoleForumACL(role=members, forum=forum, forum_role=standard),
  92. RoleForumACL(role=members, forum=redirect, forum_role=standard),
  93. RoleForumACL(role=guests, forum=category, forum_role=read_only),
  94. RoleForumACL(role=guests, forum=forum, forum_role=read_only),
  95. RoleForumACL(role=guests, forum=redirect, forum_role=read_only),
  96. ])
  97. class Migration(migrations.Migration):
  98. dependencies = [
  99. ('misago_forums', '0002_default_forums'),
  100. ('misago_acl', '0003_default_roles'),
  101. ]
  102. operations = [
  103. migrations.RunPython(create_default_forums_roles),
  104. ]