Ejemplo n.º 1
0
    def get_statusID_user(cls, user):
        """ возврString statusId or None
            входАргумент user преобразуется/проверяется через getUser(user)
            --------------------------------------------------
        return statusID_or_None for User """

        user = getUser(user)

        if user is None: return None

        _status = cls.getStatus_or_None(user)
        if _status is None:
            return None

        return _status.pk
Ejemplo n.º 2
0
        def _get_status_or_None(arg_user):
            try:
                _user = getUser(arg_user)
                if _user is None:
                    cls._run_raise(cls._s_err_user_notData)

                if _user.is_superuser:
                    return cls._get_filter_obj('superuser')

                _advUser = _user.advuser

                return _advUser.status

            except Exception as ex:
                return None
Ejemplo n.º 3
0
        def get_data_parentuser(cls, arg_user):

            res_dict = {}
            try:
                user = getUser(arg_user)
                if user is None:
                    raise ErrorRun_impl(
                        'NotData##advuser.Type_status_user arg_user: нет данных '
                    )

                _status = Com_proc_sprstatus.getStatus_or_None(user)
                if _status is None:
                    raise ErrorRun_impl(
                        'NotData##advuser.Type_status_user: нет статуса')

                res_dict = dict(full_name=user.get_full_name(),
                                strIdent=_status.strIdent)

            except Exception as ex:
                TypeError_system(ex)
                raise ex

            return res_dict
Ejemplo n.º 4
0
def type_status_user(arg_user):
    """ Процедура для выборки и анализа значений из SprStatus 
        arg_user -> User or username or иной объект, представлющий User
        return  object Type_status_user """
    def _run_raise(s_arg, showMes=None):
        s_err = 'advuser.serv_typestatus.type_status_user'

        if showMes:
            raise ErrorRun_impl('verify##{0}'.format(s_arg))
        else:
            raise ErrorRun_impl('{0} {1}'.format(s_err, s_arg))

    #-------------------------------------------------------------

    from .serv_sprstatus import Com_proc_sprstatus
    import json
    """
     Вспомогательный клас для выборки и логического сравнения поля AdvUser.status
     Базовый класс для Type_status_userExt
     Используется для многократного определения статуса в коде
     -----------------------------------------------------------
     return  Type_status_user.type_status(user) -> object Type_status_user

    """

    class Type_status_user:
        import json

        def __init__(self):
            self.error = None
            self.status = None
            self.statusID = None
            self.strIdent = None
            self.is_notstatus = None
            self.is_qust_simp = None
            self.is_qust_regs = None
            self.is_proj_memb = None
            self.is_proj_head = None
            self.is_subheader = None
            self.is_proj_sadm = None
            self.is_superuser = None
            self.levelperm = 0
            self.str_info = None
            self.username = None

        def __str__(self):
            return self.str_info

        def __bool__(self):
            if self.error: return False
            else: return True

        """
        Создание структуры dict 
            full_name, status.strIdent
        """

        @classmethod
        def get_data_parentuser(cls, arg_user):

            res_dict = {}
            try:
                user = getUser(arg_user)
                if user is None:
                    raise ErrorRun_impl(
                        'NotData##advuser.Type_status_user arg_user: нет данных '
                    )

                _status = Com_proc_sprstatus.getStatus_or_None(user)
                if _status is None:
                    raise ErrorRun_impl(
                        'NotData##advuser.Type_status_user: нет статуса')

                res_dict = dict(full_name=user.get_full_name(),
                                strIdent=_status.strIdent)

            except Exception as ex:
                TypeError_system(ex)
                raise ex

            return res_dict

    # ----------------------------------------------------

    res = Type_status_user()

    try:

        _user = getUser(arg_user)
        if _user is None:
            _run_raise('Пользователь не определен')

        _status = Com_proc_sprstatus.getStatus_or_None(_user)
        if not _status:
            _run_raise('Статус не определен')

        exp_param = json.loads(_status.exp_param)

        #  {"conv": {"headerexp": "is_headerexp"}
        key = list(exp_param['conv'].keys())[0]
        conv = exp_param['conv'][key]
        setattr(res, conv, True)
        res.levelperm = _status.levelperm
        res.statusID = _status.pk
        res.username = _user.username
        res.strIdent = _status.strIdent

        res.str_info = 'status:{0} ({2} levelPerm:{3}) - {1}'.format(
            _status.pk, _status.strIdent, conv, res.levelperm)

    except Exception as ex:
        res.is_notstatus = True
        res.error = str(ex)

    return res
Ejemplo n.º 5
0
    def get_permModf_prof(cls, arg_model, arg_modf):
        """ return class PermModf_prof(...) в котором определены ВСЕ атрибуты ПРИВЕЛЕГИЙ
            class PermModf_prof создан внутри вызываемой процедуры """

        from .serv_advuser import servAdvUser_get_advUser

        class _PermModf_prof:
            """Вспомогательный класс.

            Формат входящего аргумента arg_dict:
            структура dict из sprStatus.any_option

            {exist="exist or empty", mes="КраткИнформ", prof={add_prof:[lst_STATUS], upd_prof:[lst_STATUS] },
            err_add="Сообщение при отсутствии прав на создПроф",
            err_upd="Сообщение при отсутствии на измПроф"  }
            """
            def __init__(self, arg_status):
                self.err_add = None
                self.err_upd = None
                self.mes = None

                self.perm_addProf = False
                self.perm_updProf = False
                self.status_modf = None

                #---------- инициализация уровня привилегий пользователя ------------
                # ------
                self.levelperm = arg_status.levelperm
                self.statusID = arg_status.pk

                self._init_perm()  # процедурная инициализаци

            # верификация вхождения self.statusID в списки
            # допустимых привилегий add_prof and upd_prof
            def _init_perm(self):
                _statusID = arg_modf[4:]
                self.status_modf = _statusID

                status = cls.getStatus_or_None(_statusID)

                # считывание дополнительных параметров из sprStatus.any_option, определяющие
                # привилегии изм/созд профиля
                # там считываются значения для отображения сообщений отсутствия привилегий
                if status:
                    any_option = json.loads(status.any_option)
                    _exist = Res_proc.FN_exist()

                    self.mes = any_option['mes']
                    self.err_add = any_option.get('err_add') or self.mes
                    self.err_upd = any_option.get('err_upd') or self.mes

                    if any_option[_exist] == _exist:
                        prof = any_option['prof']
                        if prof:
                            add_perm = prof.get('add_prof')
                            upd_perm = prof.get('upd_prof')
                            if self.statusID in add_perm:
                                self.perm_addProf = True
                            if self.statusID in upd_perm:
                                self.perm_updProf = True

                else:
                    cls._run_raise(
                        ' get_permMod_prof.class PermModf_prof._init_perm status:{0} не определен'
                        .format(_statusID))

            @property
            def PR_permAdd(self):
                return self.perm_addProf

            @property
            def PR_permUpd(self):
                return self.perm_updProf

            def __str__(self):

                s_res = ''
                _empty = Res_proc.FN_empty()

                s_err_add = ''
                s_err_upd = ''

                if not self.PR_permAdd:
                    s_err_add = 'err_add:{0}'.format(self.err_add)
                if not self.PR_permUpd:
                    s_err_upd = 'err_upd:{0}'.format(self.err_upd)

                s_res = '{0}: level:{1} modfProf:{2} permAdd:{3} permUpd:{4} {5} {6}'.format(
                    self.statusID, self.levelperm, self.status_modf,
                    self.PR_permAdd or _empty, self.PR_permUpd or _empty,
                    s_err_add, s_err_upd)
                return s_res

        # ****************** PermModf_prof ********************

        res = Res_proc()
        _status = None

        s_type = type(arg_model).__name__

        try:

            if arg_modf[:3] not in ('add', 'upd'):
                res.error = (
                    'ValueError##cls.SprStatus.get_permMod_prof arg_prof: не соответствие стурктуре формата add_* or upd_*'
                )
                return res

            if s_type == 'AdvUser':
                _advuser = arg_model
                _status = _advuser.status

            else:
                if s_type in ('User', 'str', 'int'):

                    # если это суперПользователь разрешить изменение, добавление любого профиля
                    user = getUser(arg_model)
                    if user:
                        if user.is_superuser:
                            _status = cls.getStatus_or_None(user)
                            if _status is None:
                                cls._run_raise(
                                    ' get_permModf_prof: статус суперПользователя не определен'
                                )

                            permModf = _PermModf_prof(_status)

                            res.res = True
                            res.res_obj = permModf
                            return res

                        else:
                            res_advUser = servAdvUser_get_advUser(user)
                            if res_advUser is None:
                                res.error = ErrorRun_impl(
                                    'ValueError##cls.SprStatus.get_permMod_prof: нет данных в модели AdvUser'
                                )
                                return res

                            _advuser = res_advUser.res_model
                            _status = _advuser.status

            # ----------------- конец блока верификации и инциализации ------------------

            permModf = _PermModf_prof(_status)

            res.res = True
            res.res_obj = permModf

        except Exception as ex:
            res.error = ex

        return res