kopia lustrzana https://github.com/wagtail/wagtail
Convert wagtailimages to use CollectionOwnershipPermissionPolicy
rodzic
382cf37d99
commit
f71a66e0ea
|
@ -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),
|
||||
]
|
|
@ -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'
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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(
|
||||
|
|
Ładowanie…
Reference in New Issue