Fixing is_private attribute
parent
44e6f7c42d
commit
cff56f1d86
|
@ -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
|
||||
"""
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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),
|
||||
]
|
|
@ -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=[])
|
||||
|
|
Loading…
Reference in New Issue