test.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from misago.acl.test import patch_user_acl
  2. from misago.categories.models import Category
  3. default_category_acl = {
  4. 'can_see': 1,
  5. 'can_browse': 1,
  6. 'can_see_all_threads': 1,
  7. 'can_see_own_threads': 0,
  8. 'can_hide_threads': 0,
  9. 'can_approve_content': 0,
  10. 'can_edit_posts': 0,
  11. 'can_hide_posts': 0,
  12. 'can_hide_own_posts': 0,
  13. 'can_merge_threads': 0,
  14. 'can_close_threads': 0,
  15. }
  16. def patch_category_acl(acl_patch):
  17. def patch_acl(_, user_acl):
  18. category = Category.objects.get(slug="first-category")
  19. category_acl = user_acl['categories'][category.id]
  20. category_acl.update(default_category_acl)
  21. if acl_patch:
  22. category_acl.update(acl_patch)
  23. cleanup_patched_acl(user_acl, category_acl, category)
  24. return patch_user_acl(patch_acl)
  25. def patch_categories_acl_for_move(src_acl_patch=None, dst_acl_patch=None):
  26. def patch_acl(_, user_acl):
  27. src = Category.objects.get(slug="first-category")
  28. dst = Category.objects.get(slug="other-category")
  29. src_acl = user_acl['categories'][src.id]
  30. dst_acl = src_acl.copy()
  31. user_acl['categories'][dst.id] = dst_acl
  32. src_acl.update(default_category_acl)
  33. dst_acl.update(default_category_acl)
  34. if src_acl_patch:
  35. src_acl.update(src_acl_patch)
  36. if dst_acl_patch:
  37. dst_acl.update(dst_acl_patch)
  38. cleanup_patched_acl(user_acl, src_acl, src)
  39. cleanup_patched_acl(user_acl, dst_acl, dst)
  40. return patch_user_acl(patch_acl)
  41. def create_category_acl_patch(category_slug, acl_patch):
  42. def created_category_acl_patch(_, user_acl):
  43. category = Category.objects.get(slug=category_slug)
  44. category_acl = user_acl['categories'].get(category.id, {})
  45. category_acl.update(default_category_acl)
  46. if acl_patch:
  47. category_acl.update(acl_patch)
  48. cleanup_patched_acl(user_acl, category_acl, category)
  49. return created_category_acl_patch
  50. def cleanup_patched_acl(user_acl, category_acl, category):
  51. visible_categories = user_acl['visible_categories']
  52. browseable_categories = user_acl['browseable_categories']
  53. if not category_acl['can_see'] and category.id in visible_categories:
  54. visible_categories.remove(category.id)
  55. if not category_acl['can_see'] and category.id in browseable_categories:
  56. browseable_categories.remove(category.id)
  57. if not category_acl['can_browse'] and category.id in browseable_categories:
  58. browseable_categories.remove(category.id)
  59. if category_acl['can_see'] and category.id not in visible_categories:
  60. visible_categories.append(category.id)
  61. if category_acl['can_browse'] and category.id not in browseable_categories:
  62. browseable_categories.append(category.id)