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.py55
1 files changed, 22 insertions, 33 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 24b16c873..d76d2e219 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -118,11 +118,8 @@ def check_model_access_control(request, model, available_perms=None):
for perm, lbl in model._meta.permissions:
if perm not in available_perms:
continue
- cperm = model._meta.app_label + '.' + perm
- if request.user.has_perm(cperm) \
- or cperm in request.user.get_all_permissions() \
- or request.user.ishtaruser.has_right(
- perm, session=request.session):
+ if request.user.ishtaruser.person.has_right(
+ perm, session=request.session):
allowed = True
if "_own_" not in perm:
own = False
@@ -2545,7 +2542,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
def is_natural(self):
return not self.attached_to
- def has_right(self, right_name, session=None):
+ def has_right(self, right_name, session=None, obj=None):
if '.' in right_name:
right_name = right_name.split('.')[-1]
res, cache_key = "", ""
@@ -2559,13 +2556,10 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
key_list = cache.get(cache_key_list, [])
key_list.append(cache_key)
cache.set(cache_key_list, key_list, settings.CACHE_TIMEOUT)
-
if type(right_name) in (list, tuple):
- res = bool(
- self.profiles.filter(
+ res = bool(self.profiles.filter(
current=True,
- profile_type__txt_idx__in=right_name
- ).count()) or \
+ profile_type__txt_idx__in=right_name).count()) or \
bool(self.profiles.filter(
current=True,
profile_type__groups__permissions__codename__in=right_name
@@ -2577,10 +2571,9 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
codename__in=right_name).count())
else:
res = bool(
- self.profiles.filter(
- current=True,
- profile_type__txt_idx__in=right_name
- ).count()) or \
+ self.profiles.filter(
+ current=True,
+ profile_type__txt_idx=right_name).count()) or \
bool(self.profiles.filter(
current=True,
profile_type__groups__permissions__codename=right_name
@@ -2736,13 +2729,19 @@ class IshtarUser(FullSearch):
if not q.count():
return
ishtaruser = q.all()[0]
- admin, created = PersonType.objects.get_or_create(
- txt_idx='administrator')
person = ishtaruser.person
+ admin, created = ProfileType.objects.get_or_create(
+ txt_idx='administrator')
if user.is_superuser:
- person.person_types.add(admin)
- elif admin in person.person_types.all():
- person.person_types.remove(admin)
+ UserProfile.objects.get_or_create(
+ profile_type=admin, person=person,
+ defaults={'current': True})
+ else:
+ q = UserProfile.objects.filter(
+ profile_type=admin, person=person)
+ if q.count():
+ for up in q.all():
+ up.delete()
@classmethod
def create_from_user(cls, user):
@@ -2759,22 +2758,12 @@ class IshtarUser(FullSearch):
def has_right(self, right_name, session=None):
return self.person.has_right(right_name, session=session)
+ def has_perm(self, perm, model=None, session=None, obj=None):
+ return self.person.has_right(perm, session=session, obj=None)
+
def full_label(self):
return self.person.full_label()
- def has_perm(self, perm, model=None, session=None, obj=None):
- if not session:
- return self.user_ptr.has_perm(perm, model)
- cache_key = 'usersession-{}-{}-{}-{}'.format(
- session.session_key, perm, model.__name__ if model else 'no',
- obj.pk if obj else 'no')
- res = cache.get(cache_key)
- if res in (True, False):
- return res
- res = self.user_ptr.has_perm(perm, model)
- cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT)
- return res
-
class Basket(models.Model):
"""