builder.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.conf import settings
  2. from django.utils.importlib import import_module
  3. from misago.forms import Form
  4. from misago.forums.models import Forum
  5. from misago.forumroles.models import ForumRole
  6. def build_form(request, role):
  7. form_type = type('ACLForm', (Form,), dict(layout=[]))
  8. for provider in settings.PERMISSION_PROVIDERS:
  9. app_module = import_module(provider)
  10. try:
  11. app_module.make_form(request, role, form_type)
  12. except AttributeError:
  13. pass
  14. return form_type
  15. def build_forum_form(request, role):
  16. form_type = type('ACLForm', (Form,), dict(layout=[]))
  17. for provider in settings.PERMISSION_PROVIDERS:
  18. app_module = import_module(provider)
  19. try:
  20. app_module.make_forum_form(request, role, form_type)
  21. except AttributeError:
  22. pass
  23. return form_type
  24. class BaseACL(object):
  25. def __init__(self):
  26. self.acl = {}
  27. def __repr__(self):
  28. return '%s (%s)' % (self.__class__.__name__[0:-3], self.__class__.__module__)
  29. class ACL(object):
  30. def __init__(self, version):
  31. self.version = version
  32. self.team = False
  33. def __iter__(self):
  34. for attr in dir(self):
  35. if not attr.startswith("__") and attr not in ['team', 'version']:
  36. yield self.__dict__[attr]
  37. def build_acl(request, roles):
  38. acl = ACL(request.monitor['acl_version'])
  39. forums = Forum.objects.get(token='root').get_descendants().order_by('lft')
  40. perms = []
  41. forum_roles = {}
  42. for role in roles:
  43. perms.append(role.get_permissions())
  44. for role in ForumRole.objects.all():
  45. forum_roles[role.pk] = role.get_permissions()
  46. for provider in settings.PERMISSION_PROVIDERS:
  47. app_module = import_module(provider)
  48. try:
  49. app_module.build(acl, perms)
  50. except AttributeError:
  51. pass
  52. try:
  53. app_module.build_forums(acl, perms, forums, forum_roles)
  54. except AttributeError:
  55. pass
  56. for provider in settings.PERMISSION_PROVIDERS:
  57. app_module = import_module(provider)
  58. try:
  59. app_module.cleanup(acl, perms, forums)
  60. except AttributeError:
  61. pass
  62. return acl