diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 357140ea4..a0ae1ce44 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -74,19 +74,12 @@ logger = logging.getLogger(__name__) def post_save_user(sender, **kwargs): user = kwargs['instance'] - try: - q = IshtarUser.objects.filter(username=user.username) - if not q.count(): - ishtaruser = IshtarUser.create_from_user(user) - else: - ishtaruser = q.all()[0] - administrator, created = PersonType.objects.get_or_create( - txt_idx='administrator') - if ishtaruser.is_superuser \ - and not ishtaruser.has_right('administrator'): - ishtaruser.person.person_types.add(administrator) - except DatabaseError: # manage when db is not synced - pass + if kwargs["created"]: + try: + IshtarUser.create_from_user(user) + except DatabaseError: # manage when db is not synced + pass + IshtarUser.set_superuser(user) post_save.connect(post_save_user, sender=User) @@ -314,13 +307,13 @@ class OwnPerms(object): """ Get Own items """ - if isinstance(user, User): - user = IshtarUser.objects.get(user_ptr=user) - if user.is_anonymous(): + if hasattr(user, 'is_authenticated') and not user.is_authenticated(): returned = cls.objects.filter(pk__isnull=True) if values: returned = [] return returned + if isinstance(user, User): + user = IshtarUser.objects.get(user_ptr=user) items = [] if hasattr(cls, 'BASKET_MODEL'): items = list(cls.BASKET_MODEL.objects.filter(user=user).all()) @@ -2769,20 +2762,20 @@ class Person(Address, Merge, OwnPerms, ValueGetter): txt_idx__in=right_name).count()) or \ bool(self.person_types.filter( groups__permissions__codename__in=right_name).count()) or\ - bool(self.ishtaruser.groups.filter( + bool(self.ishtaruser.user_ptr.groups.filter( permissions__codename__in=right_name ).count()) or\ - bool(self.ishtaruser.user_permissions.filter( + bool(self.ishtaruser.user_ptr.user_permissions.filter( codename__in=right_name).count()) # or self.person_types.filter(wizard__url_name__in=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 \ - bool(self.ishtaruser.groups.filter( + bool(self.ishtaruser.user_ptr.groups.filter( permissions__codename__in=[right_name] - ).count()) or\ - bool(self.ishtaruser.user_permissions.filter( + ).count()) or \ + bool(self.ishtaruser.user_ptr.user_permissions.filter( codename__in=[right_name]).count()) # or self.person_types.filter(wizard__url_name=right_name).count()) if session: @@ -2850,7 +2843,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter): =user.ishtaruser) -class IshtarUser(User): +class IshtarUser(models.Model): TABLE_COLS = ('username', 'person__name', 'person__surname', 'person__email', 'person__person_types_list', 'person__attached_to') @@ -2867,6 +2860,8 @@ class IshtarUser(User): } # fields + user_ptr = models.OneToOneField(User, primary_key=True, + related_name='ishtaruser') person = models.OneToOneField(Person, verbose_name=_(u"Person"), related_name='ishtaruser') advanced_shortcut_menu = models.BooleanField( @@ -2877,6 +2872,20 @@ class IshtarUser(User): verbose_name_plural = _(u"Ishtar users") @classmethod + def set_superuser(cls, user): + q = cls.objects.filter(user_ptr=user) + if not q.count(): + return + ishtaruser = q.all()[0] + admin, created = PersonType.objects.get_or_create( + txt_idx='administrator') + person = ishtaruser.person + if user.is_superuser: + person.person_types.add(admin) + elif admin in person.person_types.all(): + person.person_types.remove(admin) + + @classmethod def create_from_user(cls, user): default = user.username surname = user.first_name or default @@ -2885,13 +2894,7 @@ class IshtarUser(User): person = Person.objects.create(surname=surname, name=name, email=email, history_modifier=user) - if user.is_superuser: - person_type, created = PersonType.objects.get_or_create( - txt_idx='administrator') - person.person_types.add(person_type) - password = user.password - isht_user = IshtarUser.objects.create( - user_ptr=user, username=default, person=person, password=password) + isht_user = cls.objects.create(user_ptr=user, person=person) return isht_user def has_right(self, right_name, session=None): @@ -2902,20 +2905,17 @@ class IshtarUser(User): def has_perm(self, perm, model=None, session=None, obj=None): if not session: - return super(IshtarUser, self).has_perm(perm, model) + 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 = super(IshtarUser, self).has_perm(perm, model) + res = self.user_ptr.has_perm(perm, model) cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT) return res -IshtarUser._meta.get_field('password').help_text = _( - u"To modify the password use the form in Auth > User") - class AuthorType(GeneralType): order = models.IntegerField(_(u"Order"), default=1) |