mirror of
https://github.com/umap-project/umap.git
synced 2025-05-05 06:01:48 +02:00
Set up an abstract PermissionsModel for DataLayer
Curiously the auto-generated migration adds (existing) fields to the map too. Refs #584
This commit is contained in:
parent
0b76ebb259
commit
53a0946336
2 changed files with 138 additions and 37 deletions
|
@ -0,0 +1,90 @@
|
||||||
|
# Generated by Django 4.1.7 on 2023-05-31 00:54
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
("umap", "0009_star"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="datalayer",
|
||||||
|
name="edit_status",
|
||||||
|
field=models.SmallIntegerField(
|
||||||
|
choices=[
|
||||||
|
(1, "Everyone can edit"),
|
||||||
|
(2, "Only editors can edit"),
|
||||||
|
(3, "Only owner can edit"),
|
||||||
|
],
|
||||||
|
default=3,
|
||||||
|
verbose_name="edit status",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="datalayer",
|
||||||
|
name="editors",
|
||||||
|
field=models.ManyToManyField(
|
||||||
|
blank=True,
|
||||||
|
related_name="%(app_label)s_%(class)s_editors_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="editors",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="datalayer",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name="%(app_label)s_%(class)s_owner_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="datalayer",
|
||||||
|
name="share_status",
|
||||||
|
field=models.SmallIntegerField(
|
||||||
|
choices=[
|
||||||
|
(1, "everyone (public)"),
|
||||||
|
(2, "anyone with link"),
|
||||||
|
(3, "editors only"),
|
||||||
|
(9, "blocked"),
|
||||||
|
],
|
||||||
|
default=1,
|
||||||
|
verbose_name="share status",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="map",
|
||||||
|
name="editors",
|
||||||
|
field=models.ManyToManyField(
|
||||||
|
blank=True,
|
||||||
|
related_name="%(app_label)s_%(class)s_editors_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="editors",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="map",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name="%(app_label)s_%(class)s_owner_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -12,6 +12,52 @@ from django.core.files.base import File
|
||||||
from .managers import PublicManager
|
from .managers import PublicManager
|
||||||
|
|
||||||
|
|
||||||
|
class PermissionsModel(models.Model):
|
||||||
|
ANONYMOUS = 1
|
||||||
|
EDITORS = 2
|
||||||
|
OWNER = 3
|
||||||
|
PUBLIC = 1
|
||||||
|
OPEN = 2
|
||||||
|
PRIVATE = 3
|
||||||
|
BLOCKED = 9
|
||||||
|
EDIT_STATUS = (
|
||||||
|
(ANONYMOUS, _("Everyone can edit")),
|
||||||
|
(EDITORS, _("Only editors can edit")),
|
||||||
|
(OWNER, _("Only owner can edit")),
|
||||||
|
)
|
||||||
|
SHARE_STATUS = (
|
||||||
|
(PUBLIC, _("everyone (public)")),
|
||||||
|
(OPEN, _("anyone with link")),
|
||||||
|
(PRIVATE, _("editors only")),
|
||||||
|
(BLOCKED, _("blocked")),
|
||||||
|
)
|
||||||
|
owner = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
verbose_name=_("owner"),
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
related_name="%(app_label)s_%(class)s_owner_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
)
|
||||||
|
editors = models.ManyToManyField(
|
||||||
|
settings.AUTH_USER_MODEL,
|
||||||
|
blank=True,
|
||||||
|
verbose_name=_("editors"),
|
||||||
|
related_name="%(app_label)s_%(class)s_editors_related",
|
||||||
|
related_query_name="%(app_label)s_%(class)ss",
|
||||||
|
)
|
||||||
|
edit_status = models.SmallIntegerField(
|
||||||
|
choices=EDIT_STATUS, default=OWNER, verbose_name=_("edit status")
|
||||||
|
)
|
||||||
|
share_status = models.SmallIntegerField(
|
||||||
|
choices=SHARE_STATUS, default=PUBLIC, verbose_name=_("share status")
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
class NamedModel(models.Model):
|
class NamedModel(models.Model):
|
||||||
name = models.CharField(max_length=200, verbose_name=_("name"))
|
name = models.CharField(max_length=200, verbose_name=_("name"))
|
||||||
|
|
||||||
|
@ -94,29 +140,11 @@ class TileLayer(NamedModel):
|
||||||
ordering = ("rank", "name")
|
ordering = ("rank", "name")
|
||||||
|
|
||||||
|
|
||||||
class Map(NamedModel):
|
class Map(NamedModel, PermissionsModel):
|
||||||
"""
|
"""
|
||||||
A single thematical map.
|
A single thematical map.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ANONYMOUS = 1
|
|
||||||
EDITORS = 2
|
|
||||||
OWNER = 3
|
|
||||||
PUBLIC = 1
|
|
||||||
OPEN = 2
|
|
||||||
PRIVATE = 3
|
|
||||||
BLOCKED = 9
|
|
||||||
EDIT_STATUS = (
|
|
||||||
(ANONYMOUS, _("Everyone can edit")),
|
|
||||||
(EDITORS, _("Only editors can edit")),
|
|
||||||
(OWNER, _("Only owner can edit")),
|
|
||||||
)
|
|
||||||
SHARE_STATUS = (
|
|
||||||
(PUBLIC, _("everyone (public)")),
|
|
||||||
(OPEN, _("anyone with link")),
|
|
||||||
(PRIVATE, _("editors only")),
|
|
||||||
(BLOCKED, _("blocked")),
|
|
||||||
)
|
|
||||||
slug = models.SlugField(db_index=True)
|
slug = models.SlugField(db_index=True)
|
||||||
description = models.TextField(blank=True, null=True, verbose_name=_("description"))
|
description = models.TextField(blank=True, null=True, verbose_name=_("description"))
|
||||||
center = models.PointField(geography=True, verbose_name=_("center"))
|
center = models.PointField(geography=True, verbose_name=_("center"))
|
||||||
|
@ -132,23 +160,6 @@ class Map(NamedModel):
|
||||||
default=get_default_licence,
|
default=get_default_licence,
|
||||||
)
|
)
|
||||||
modified_at = models.DateTimeField(auto_now=True)
|
modified_at = models.DateTimeField(auto_now=True)
|
||||||
owner = models.ForeignKey(
|
|
||||||
settings.AUTH_USER_MODEL,
|
|
||||||
blank=True,
|
|
||||||
null=True,
|
|
||||||
related_name="owned_maps",
|
|
||||||
verbose_name=_("owner"),
|
|
||||||
on_delete=models.PROTECT,
|
|
||||||
)
|
|
||||||
editors = models.ManyToManyField(
|
|
||||||
settings.AUTH_USER_MODEL, blank=True, verbose_name=_("editors")
|
|
||||||
)
|
|
||||||
edit_status = models.SmallIntegerField(
|
|
||||||
choices=EDIT_STATUS, default=OWNER, verbose_name=_("edit status")
|
|
||||||
)
|
|
||||||
share_status = models.SmallIntegerField(
|
|
||||||
choices=SHARE_STATUS, default=PUBLIC, verbose_name=_("share status")
|
|
||||||
)
|
|
||||||
settings = models.JSONField(
|
settings = models.JSONField(
|
||||||
blank=True, null=True, verbose_name=_("settings"), default=dict
|
blank=True, null=True, verbose_name=_("settings"), default=dict
|
||||||
)
|
)
|
||||||
|
@ -261,7 +272,7 @@ def upload_to(instance, filename):
|
||||||
return os.path.join(instance.storage_root(), name)
|
return os.path.join(instance.storage_root(), name)
|
||||||
|
|
||||||
|
|
||||||
class DataLayer(NamedModel):
|
class DataLayer(NamedModel, PermissionsModel):
|
||||||
"""
|
"""
|
||||||
Layer to store Features in.
|
Layer to store Features in.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue