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
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
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
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
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