forked from ungleich-public/dynamicweb
46 lines
1.6 KiB
Python
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
|