Fixing is_private attribute

remotes/origin/enhancement/email-actions
Alejandro Alonso 2015-03-09 11:50:18 +01:00 committed by David Barragán Merino
parent 44e6f7c42d
commit cff56f1d86
4 changed files with 52 additions and 12 deletions

View File

@ -105,7 +105,12 @@ def get_user_project_permissions(user, project):
return set(owner_permissions + members_permissions + public_permissions + anon_permissions)
def set_base_permissions_for_public_project(project):
def set_base_permissions_for_project(project):
if project.is_private:
project.anon_permissions = []
project.public_permissions = []
else:
"""
If a project is public anonymous and registered users should have at least visualization permissions
"""

View File

@ -168,6 +168,20 @@ class ProjectViewSet(ModelCrudViewSet):
services.remove_user_from_project(request.user, project)
return response.Ok()
def _set_base_permissions(self, obj):
update_permissions = False
if not obj.id:
if not obj.is_private:
# Creating a public project
update_permissions = True
else:
if self.get_object().is_private != obj.is_private:
# Changing project public state
update_permissions = True
if update_permissions:
permissions_service.set_base_permissions_for_project(obj)
def pre_save(self, obj):
if not obj.id:
obj.owner = self.request.user
@ -176,10 +190,7 @@ class ProjectViewSet(ModelCrudViewSet):
if not obj.id:
obj.template = self.request.QUERY_PARAMS.get('template', None)
# Update anon permissions if the project is public
if obj.is_private == False:
permissions_service.set_base_permissions_for_public_project(obj)
self._set_base_permissions(obj)
super().pre_save(obj)
def destroy(self, request, *args, **kwargs):

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
def update_existing_projects(apps, schema_editor):
Project = apps.get_model("projects", "Project")
Project.objects.filter(is_private=False).update(is_private=True)
class Migration(migrations.Migration):
dependencies = [
('projects', '0016_fix_json_field_not_null'),
]
operations = [
migrations.AlterField(
model_name='project',
name='is_private',
field=models.BooleanField(verbose_name='is private', default=True),
preserve_default=True,
),
migrations.RunPython(update_existing_projects),
]

View File

@ -160,7 +160,7 @@ class Project(ProjectDefaults, TaggedMixin, models.Model):
default=[],
verbose_name=_("user permissions"),
choices=USER_PERMISSIONS)
is_private = models.BooleanField(default=False, null=False, blank=True,
is_private = models.BooleanField(default=True, null=False, blank=True,
verbose_name=_("is private"))
tags_colors = TextArrayField(dimension=2, null=False, blank=True, verbose_name=_("tags colors"), default=[])