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
|
||||
|
||||
|
||||
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):
|
||||
name = models.CharField(max_length=200, verbose_name=_("name"))
|
||||
|
||||
|
@ -94,29 +140,11 @@ class TileLayer(NamedModel):
|
|||
ordering = ("rank", "name")
|
||||
|
||||
|
||||
class Map(NamedModel):
|
||||
class Map(NamedModel, PermissionsModel):
|
||||
"""
|
||||
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)
|
||||
description = models.TextField(blank=True, null=True, verbose_name=_("description"))
|
||||
center = models.PointField(geography=True, verbose_name=_("center"))
|
||||
|
@ -132,23 +160,6 @@ class Map(NamedModel):
|
|||
default=get_default_licence,
|
||||
)
|
||||
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(
|
||||
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)
|
||||
|
||||
|
||||
class DataLayer(NamedModel):
|
||||
class DataLayer(NamedModel, PermissionsModel):
|
||||
"""
|
||||
Layer to store Features in.
|
||||
"""
|
||||
|
|
Loading…
Reference in a new issue