summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py48
1 files changed, 41 insertions, 7 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 72b41e0cf..b5e371b25 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -434,6 +434,18 @@ class GeneralType(models.Model):
for item in cls.objects.all():
item.generate_key()
+ @classmethod
+ def get_cache(cls, slug):
+ cache_key, value = get_cache(cls, slug)
+ if value:
+ return value
+ try:
+ obj = cls.objects.get(txt_idx=slug)
+ cache.set(cache_key, obj, settings.CACHE_TIMEOUT)
+ return obj
+ except cls.DoesNotExist:
+ return None
+
class ItemKey(models.Model):
key = models.CharField(_(u"Key"), max_length=100)
@@ -1938,19 +1950,29 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
def is_natural(self):
return not self.attached_to
- def has_right(self, right_name):
+ def has_right(self, right_name, session=None):
if '.' in right_name:
right_name = right_name.split('.')[-1]
+ res, cache_key = "", ""
+ if session:
+ cache_key = 'session-{}-{}'.format(session.session_key, right_name)
+ res = cache.get(cache_key)
+ if res in (True, False):
+ return res
if type(right_name) in (list, tuple):
- return bool(self.person_types.filter(
+ res = bool(self.person_types.filter(
txt_idx__in=right_name).count()) or \
bool(self.person_types.filter(
groups__permissions__codename__in=right_name).count())
# or self.person_types.filter(wizard__url_name__in=right_name).count())
- return bool(self.person_types.filter(txt_idx=right_name).count()) or \
- bool(self.person_types.filter(
- groups__permissions__codename=right_name).count())
+ else:
+ res = bool(self.person_types.filter(txt_idx=right_name).count()) or \
+ bool(self.person_types.filter(
+ groups__permissions__codename=right_name).count())
# or self.person_types.filter(wizard__url_name=right_name).count())
+ if session:
+ cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT)
+ return res
def full_label(self):
values = []
@@ -2010,12 +2032,24 @@ class IshtarUser(User):
return IshtarUser.objects.create(user_ptr=user, username=default,
person=person)
- def has_right(self, right_name):
- return self.person.has_right(right_name)
+ def has_right(self, right_name, session=None):
+ return self.person.has_right(right_name, session=session)
def full_label(self):
return self.person.full_label()
+ def has_perm(self, perm, model=None, session=None):
+ if not session:
+ return super(IshtarUser, self).has_perm(perm, model)
+ cache_key = 'usersession-{}-{}'.format(session.session_key, perm,
+ model or 'no')
+ res = cache.get(cache_key)
+ if res in (True, False):
+ return res
+ res = super(IshtarUser, self).has_perm(perm, model)
+ cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT)
+ return res
+
class AuthorType(GeneralType):
class Meta: