From eb267cae1084df2c82eb6409e777846a4118c41b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 7 Jan 2012 23:18:42 -0400 Subject: [PATCH] Add a Singleton Model class and an AnonymousUserSingleton model to support adding permissions and access to anonymous users --- apps/common/models.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/common/models.py b/apps/common/models.py index 71a8362390..1e174119bb 100644 --- a/apps/common/models.py +++ b/apps/common/models.py @@ -1,3 +1,43 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.models import AnonymousUser -# Create your models here. +SINGLETON_LOCK_ID = 1 + + +class SingletonManager(models.Manager): + def get(self, **kwargs): + instance, created = self.model.objects.get_or_create(lock_id=SINGLETON_LOCK_ID, **kwargs) + return instance + + +class Singleton(models.Model): + lock_id = models.CharField(max_length=1, default=SINGLETON_LOCK_ID, editable=False, verbose_name=_(u'lock field'), unique=True) + + objects = SingletonManager() + + def save(self, *args, **kwargs): + self.id = 1 + super(Singleton, self).save(*args, **kwargs) + + def delete(self): + pass + + class Meta: + abstract = True + + +class AnonymousUserSingletonManager(SingletonManager): + def passthru_check(self, user): + if isinstance(user, AnonymousUser): + return self.model.objects.get() + else: + return user + + +class AnonymousUserSingleton(Singleton): + objects = AnonymousUserSingletonManager() + + class Meta: + verbose_name = _(u'anonymous user') + verbose_name_plural = _(u'anonymous user')