diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 55 |
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): """ |