code: def has_perm(self, user_obj, perm, obj=None):
          
          if not is_authenticated(user_obj):
              return False
          # construct the permission full name
          change_permission = self.get_full_permission_string('change')
          delete_permission = self.get_full_permission_string('delete')
          # check if the user is authenticated
          if obj is None:
              # object permission without obj should return True
              # Ref: https://code.djangoproject.com/wiki/RowLevelPermissions
              if self.any_permission:
                  return True
              if self.change_permission and perm == change_permission:
                  return True
              if self.delete_permission and perm == delete_permission:
                  return True
              return False
          elif user_obj.is_active:
              # check if the user trying to interact with himself
              if obj == user_obj:
                  if self.any_permission:
                      # have any kind of permissions to himself
                      return True
                  if (self.change_permission and
                          perm == change_permission):
                      return True
                  if (self.delete_permission and
                          perm == delete_permission):
                      return True
          return False
docs: Check if user have permission of himself
  
          If the user_obj is not authenticated, it return ``False``.
  
          If no object is specified, it return ``True`` when the corresponding
          permission was specified to ``True`` (changed from v0.7.0).
          This behavior is based on the django system.
          https://code.djangoproject.com/wiki/RowLevelPermissions
  
          If an object is specified, it will return ``True`` if the object is the
          user.
          So users can change or delete themselves (you can change this behavior
          to set ``any_permission``, ``change_permissino`` or
          ``delete_permission`` attributes of this instance).
  
          Parameters
          ----------
          user_obj : django user model instance
              A django user model instance which be checked
          perm : string
              `app_label.codename` formatted permission string
          obj : None or django model instance
              None or django model instance for object permission
  
          Returns
          -------
          boolean
              Whether the specified user have specified permission (of specified
              object).