dynamicweb/cms/models/settingmodels.py

46 lines
1.6 KiB
Python

from django.conf import settings
from django.db import models
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
class PlaceholderForeignKey(models.ForeignKey):
def run_checks(self, placeholder, user):
# A clipboard is private to its owner: only they have permission to
# change it. Other users must not be able to read from or write to it.
try:
return placeholder.source.has_placeholder_change_permission(user)
except AttributeError:
return False
class UserSettings(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
editable=False,
related_name='djangocms_usersettings',
)
language = models.CharField(_("Language"), max_length=10, choices=settings.LANGUAGES,
help_text=_("The language for the admin interface and toolbar"))
clipboard = PlaceholderForeignKey(
'cms.Placeholder',
on_delete=models.CASCADE,
blank=True,
null=True,
editable=False,
)
class Meta:
verbose_name = _('user setting')
verbose_name_plural = _('user settings')
app_label = 'cms'
def __str__(self):
return force_str(self.user)
def has_placeholder_change_permission(self, user):
# User always has permission to change their own clipboard, but only
# their own: a clipboard may contain content other users are not
# allowed to see.
return self.user_id == user.pk or user.is_superuser