Convert wagtailimages to use CollectionOwnershipPermissionPolicy

pull/2243/merge
Matt Westcott 2016-02-14 13:52:04 +00:00
rodzic 382cf37d99
commit f71a66e0ea
4 zmienionych plików z 80 dodań i 6 usunięć

Wyświetl plik

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
def get_image_permissions(apps):
# return a queryset of the 'add_image' and 'change_image' permissions
Permission = apps.get_model('auth.Permission')
ContentType = apps.get_model('contenttypes.ContentType')
image_content_type, _created = ContentType.objects.get_or_create(
model='image',
app_label='wagtailimages',
)
return Permission.objects.filter(
content_type=image_content_type,
codename__in=['add_image', 'change_image']
)
def copy_image_permissions_to_collections(apps, schema_editor):
Collection = apps.get_model('wagtailcore.Collection')
Group = apps.get_model('auth.Group')
GroupCollectionPermission = apps.get_model('wagtailcore.GroupCollectionPermission')
root_collection = Collection.objects.get(depth=1)
for permission in get_image_permissions(apps):
for group in Group.objects.filter(permissions=permission):
GroupCollectionPermission.objects.create(
group=group,
collection=root_collection,
permission=permission
)
def remove_image_permissions_from_collections(apps, schema_editor):
GroupCollectionPermission = apps.get_model('wagtailcore.GroupCollectionPermission')
image_permissions = get_image_permissions(apps)
GroupCollectionPermission.objects.filter(permission__in=image_permissions).delete()
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0026_group_collection_permission'),
('wagtailimages', '0011_image_collection'),
]
operations = [
migrations.RunPython(
copy_image_permissions_to_collections,
remove_image_permissions_from_collections),
]

Wyświetl plik

@ -1,8 +1,10 @@
from wagtail.wagtailcore.permission_policies import OwnershipPermissionPolicy
from wagtail.wagtailcore.permission_policies.collections import (
CollectionOwnershipPermissionPolicy
)
from wagtail.wagtailimages.models import Image, get_image_model
permission_policy = OwnershipPermissionPolicy(
permission_policy = CollectionOwnershipPermissionPolicy(
get_image_model(),
auth_model=Image,
owner_field_name='uploaded_by_user'

Wyświetl plik

@ -6,7 +6,7 @@ from django.test import TestCase, override_settings
from django.utils.http import urlquote
from django.core.urlresolvers import reverse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.contrib.auth.models import Permission, Group
from django.core.files.uploadedfile import SimpleUploadedFile
from django.template.defaultfilters import filesizeformat
@ -19,6 +19,7 @@ except ImportError: # < Django 1,8
urlquote_safechars = '/'
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore.models import Collection, GroupCollectionPermission
from wagtail.wagtailimages.utils import generate_signature
from .utils import Image, get_test_image_file
@ -801,7 +802,16 @@ class TestEditOnlyPermissions(TestCase, WagtailTestUtils):
)
change_permission = Permission.objects.get(content_type__app_label='wagtailimages', codename='change_image')
admin_permission = Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')
user.user_permissions.add(change_permission, admin_permission)
image_changers_group = Group.objects.create(name='Image changers')
image_changers_group.permissions.add(admin_permission)
GroupCollectionPermission.objects.create(
group=image_changers_group,
collection=Collection.get_first_root_node(),
permission=change_permission
)
user.groups.add(image_changers_group)
self.client.login(username='changeonly', password='password')
def test_get_index(self):

Wyświetl plik

@ -11,7 +11,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile
from django.db.utils import IntegrityError
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.models import Page, Collection, GroupCollectionPermission
from wagtail.tests.testapp.models import EventPage, EventPageCarouselItem
from wagtail.wagtailimages.models import Rendition, SourceImageIOError
from wagtail.wagtailimages.rect import Rect
@ -145,7 +145,13 @@ class TestImagePermissions(TestCase):
)
# Owner user must have the add_image permission
self.owner.user_permissions.add(Permission.objects.get(codename='add_image'))
image_adders_group = Group.objects.create(name="Image adders")
GroupCollectionPermission.objects.create(
group=image_adders_group,
collection=Collection.get_first_root_node(),
permission=Permission.objects.get(codename='add_image'),
)
self.owner.groups.add(image_adders_group)
# Create an image for running tests on
self.image = Image.objects.create(