general: make it possible to restrict a cell to unlogged users (#8641)

This commit is contained in:
Frédéric Péters 2015-10-29 15:39:31 +01:00
parent 07ad4459f8
commit 9d01a708bf
6 changed files with 175 additions and 2 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('family', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='familyinfoscell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
]

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('momo', '0006_momooptions_extra_css'),
]
operations = [
migrations.AddField(
model_name='momoiconcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
]

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('wcs', '0009_remove_wcscategorycell_link_page'),
]
operations = [
migrations.AddField(
model_name='categoriescell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='trackingcodeinputcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='wcscategorycell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='wcscurrentdraftscell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='wcscurrentformscell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='wcsformcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='wcsformsofcategorycell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
]

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('data', '0011_auto_20151028_1047'),
]
operations = [
migrations.AddField(
model_name='blurpcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='feedcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='fortunecell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='linkcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='menucell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='textcell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
migrations.AddField(
model_name='unlockmarkercell',
name='restricted_to_unlogged',
field=models.BooleanField(default=False, verbose_name='Restrict to unlogged users'),
preserve_default=True,
),
]

View File

@ -45,6 +45,8 @@ from combo.utils import NothingInCacheException
def element_is_visible(element, user=None):
if hasattr(element, 'restricted_to_unlogged') and element.restricted_to_unlogged:
return bool(user is None or user.is_anonymous())
if element.public:
return True
if user is None:
@ -233,6 +235,8 @@ class CellBase(models.Model):
slug = models.SlugField(_('Slug'), blank=True)
public = models.BooleanField(_('Public'), default=True)
restricted_to_unlogged = models.BooleanField(
_('Restrict to unlogged users'), default=False)
groups = models.ManyToManyField(Group, verbose_name=_('Groups'), blank=True)
default_form_class = None
@ -348,11 +352,13 @@ class CellBase(models.Model):
def formfield_callback(field):
if field.name == 'public':
return OppositeBooleanField(label=_('Private'), required=False)
return OppositeBooleanField(
label=_('Restrict to logged-in users'),
required=False)
return field.formfield()
return model_forms.modelform_factory(self.__class__,
fields=['public', 'groups'],
fields=['restricted_to_unlogged', 'public', 'groups'],
formfield_callback=formfield_callback)
def get_extra_manager_context(self):

View File

@ -38,6 +38,21 @@ def test_page_contents():
resp = app.get('/', status=200)
assert 'Foobar' in resp.body
def test_page_contents_unlogged_only(admin_user):
Page.objects.all().delete()
page = Page(title='Home', slug='index', template_name='standard')
page.save()
cell = TextCell(page=page, placeholder='content', text='Foobar', order=0,
restricted_to_unlogged=True)
cell.save()
app = TestApp(application)
resp = app.get('/', status=200)
assert 'Foobar' in resp.body
app = login(TestApp(application))
resp = app.get('/', status=200)
assert not 'Foobar' in resp.body
def test_page_footer_acquisition():
Page.objects.all().delete()
page = Page(title='Home', slug='index', template_name='standard')