def _get_current_use_relative_contracts(uid): """ 这几把查询...我只能query_all了-.-... """ with thrift_client('ers') as ers: contracts = [] city_ids = get_marketman_relative_city_ids(uid) before_one_month = arrow.now().replace(days=-8).timestamp if current_user.is_super_admin(): city_query = thirdparty_svc.ers.TCityQuery() cities = ers.query_city(city_query) city_ids.extend([city.id for city in cities]) if city_ids: q = thirdparty_svc.ers.TActivitySubsidyContractQuery() q.city_ids = city_ids q.created_at_from = before_one_month _contracts = ers.query_activity_subsidy_contract(q) contracts.extend(_contracts) restaurant_ids = get_marketman_relative_city_ids(current_user.id) if restaurant_ids: q = thirdparty_svc.ers.TActivitySubsidyContractQuery() q.restaurant_ids = restaurant_ids q.created_at_from = before_one_month _contracts = ers.query_activity_subsidy_contract(q) contracts.extend(_contracts) return contracts
def check_region_post(*args, **kwargs): if current_user.is_super_admin(): return True args = args_parser.parse_all() city_ids = current_user.city_ids if args['city_id'] in city_ids: return True
def get_city_ids_or_restaurant_ids_by_user(): """ return [city_ids,], [restaurant_ids] """ user_id = current_user.id # if super admin if current_user.is_super_admin(): return None, None with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return user_struct.city_ids, None region_ids = [] # if region_group.admin if user_struct.region_group_ids: with thrift_client('ers') as ers: regions = ers.get_regions_by_region_group_ids( user_struct.region_group_ids) region_ids = [region.id for region in regions] # if region.admin if user_struct.region_ids: region_ids.extend(user_struct.region_ids) region_ids = list(set(region_ids)) with thrift_client('ers') as ers: restaurant_ids = ers.mget_restaurant_in_region(region_ids, True) return None, restaurant_ids
def city_permission(city_id): if current_user.is_super_admin(): return True if city_id in current_user.city_ids: return True return False
def check_region(*args, **kwargs): if current_user.is_super_admin(): return True region_id = int(kwargs['pk']) if region_id in current_user.region_ids: return True city_ids = current_user.city_ids if city_ids: region = region_base.get(region_id) if region['city_id'] in city_ids: return True
def region_permission(region_id): if current_user.is_super_admin(): return True if region_id in current_user.region_ids: return True elif current_user.city_ids: city_id = region_brand.get(region_id)['city_id'] if city_permission(city_id): return True return False
def get_pending_activity_stats(args): """ get activity status which is pending """ search_text = to_int(args.get('search_text')) query_city_id = to_int(args.get('city_id')) page_no, page_size = get_paging_params() user_city_ids, user_restaurant_ids = \ get_city_ids_or_restaurant_ids_by_user() t_activity_status_query = thirdparty_svc.eos.TActivityStatsQuery() t_activity_status_query.statuses = [ thirdparty_svc.eos.ActivityStatsConst.STATUS_PENDING, ] t_activity_status_query.with_subsidy = True t_activity_status_query.from_date = args.get('from_date') t_activity_status_query.to_date = args.get('to_date') t_activity_status_query.offset = (page_no - 1) * page_size t_activity_status_query.limit = page_size # if current_user is admin, restaurant_ids and user_city_ids are None. if current_user.is_super_admin(): if query_city_id is not None: t_activity_status_query.city_ids = [query_city_id, ] if search_text is not None: t_activity_status_query.restaurant_ids = [search_text, ] with thrift_client('eos') as eos: activity_status_list = eos.query_auto_pay_activity_stats_result( t_activity_status_query) return [act.__dict__ for act in activity_status_list] if user_restaurant_ids or user_city_ids: city_ids = user_city_ids if query_city_id is not None: if user_city_ids is None or query_city_id in user_city_ids: city_ids = [query_city_id, ] else: return [] t_activity_status_query.city_ids = city_ids # if user_city_ids is not None, user_restaurant_ids must be None restaurant_ids = user_restaurant_ids if search_text is not None: restaurant_ids = [search_text, ] t_activity_status_query.restaurant_ids = restaurant_ids with thrift_client('eos') as eos: activity_status_list = eos.query_auto_pay_activity_stats_result( t_activity_status_query) return [act.__dict__ for act in activity_status_list] else: return []
def decorated_view(*args, **kwargs): # return while_no_permission() _kwargs = copy.copy(kwargs) _kwargs.update(deco_kwargs) _args = deco_args + args if not current_app.config['LOGIN_REQUIRED']: check_result = True else: check_result = check_func(*_args, **_kwargs) if current_user.is_super_admin(): check_result = True if check_result: return fn(*args, **kwargs) else: return no_permission()
def get_city_id_name_pairs_by_user(): # if super admin if current_user.is_super_admin(): return {city.id: city.name for city in get_all_cities()} with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(current_user.id) # if city.admin if user_struct.city_ids: with thrift_client('ers') as ers: cities = ers.mget_city(user_struct.city_ids).values() return {city.id: city.name for city in cities} # do not have cities return []
def get_by_uid(user_id, status=None, offset=None, limit=None): q = DBSession().query(RestaurantRecruitment).\ filter(RestaurantRecruitment.restaurant_id > 0) if status is not None: q = q.filter(RestaurantRecruitment.status == status) if offset is not None: q = q.offset(offset) if limit is not None: q = q.limit(min(limit, MAX_QUERY_LIST_SIZE)) # if super admin if current_user.is_super_admin(): return q with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return q.filter(RestaurantRecruitment.city_id.in_( user_struct.city_ids)).all() region_ids = [] # if region_group.admin if user_struct.region_group_ids: with thrift_client('ers') as ers: regions = ers.get_regions_by_region_group_ids( user_struct.region_group_ids) region_ids = [region.id for region in regions] # if region.admin if user_struct.region_ids: region_ids.extend(user_struct.region_ids) region_ids = list(set(region_ids)) with thrift_client('ers') as ers: restaurant_ids = ers.mget_restaurant_in_region(region_ids, True) return q.filter(RestaurantRecruitment.restaurant_id.in_(restaurant_ids))
def get_by_uid(user_id, status=None, offset=None, limit=None): q = DBSession().query(RestaurantRecruitment).\ filter(RestaurantRecruitment.restaurant_id > 0) if status is not None: q = q.filter(RestaurantRecruitment.status == status) if offset is not None: q = q.offset(offset) if limit is not None: q = q.limit(min(limit, MAX_QUERY_LIST_SIZE)) # if super admin if current_user.is_super_admin(): return q with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return q.filter( RestaurantRecruitment.city_id.in_(user_struct.city_ids)).all() region_ids = [] # if region_group.admin if user_struct.region_group_ids: with thrift_client('ers') as ers: regions = ers.get_regions_by_region_group_ids( user_struct.region_group_ids) region_ids = [region.id for region in regions] # if region.admin if user_struct.region_ids: region_ids.extend(user_struct.region_ids) region_ids = list(set(region_ids)) with thrift_client('ers') as ers: restaurant_ids = ers.mget_restaurant_in_region(region_ids, True) return q.filter(RestaurantRecruitment.restaurant_id.in_(restaurant_ids))
def wrapper(self, *args, **kwargs): permission_key = permission_name if permission_name is None: permission_key = ':'.join( [self.__class__.__name__, func.__name__]) p_groups = permission_map.get(permission_key) is_permitted = False if 'superadmin' in p_groups and current_user.is_super_admin(): is_permitted = True if not is_permitted: if p_groups is None: return no_permission() if config.LOGIN['enabled'] and \ not current_user.has_groups(p_groups): return no_permission() return func(self, *args, **kwargs)
def get_direct_struct(): if current_user.is_super_admin(): return None, None, None with thrift_client('ers') as ers: direct_struct = ers.get_direct_struct(current_user.id) city_ids = direct_struct.city_ids or None region_group_ids = direct_struct.region_group_ids or None region_ids = direct_struct.region_ids or None if city_ids is None and region_group_ids is None and region_ids is None: user_groups = current_user.user_groups if not user_groups: return [], [], [] for group in user_groups: if group in director_permission: return [], [], [] return city_ids, region_group_ids, region_ids
def get_city_ids_by_user(user_id=None): """ :return 1.superadmin [all citiy ids] 2.city_director [city_ids] 3.others [] """ if user_id is None: user_id = current_user.id # if super admin if current_user.is_super_admin(): return [city.id for city in get_all_cities()] with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return user_struct.city_ids # do not have cities return []
def count_by_uid(user_id, status=None): q = DBSession().query(func.count(RestaurantRecruitment.id)).\ filter(RestaurantRecruitment.restaurant_id > 0) if status is not None: q = q.filter(RestaurantRecruitment.status == status) # if super admin if current_user.is_super_admin(): return q.scalar() with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return q.filter(RestaurantRecruitment.city_id.in_( user_struct.city_ids)).all().scalar() region_ids = [] # if region_group.admin if user_struct.region_group_ids: with thrift_client('ers') as ers: regions = ers.get_regions_by_region_group_ids( user_struct.region_group_ids) region_ids = [region.id for region in regions] # if region.admin if user_struct.region_ids: region_ids.extend(user_struct.region_ids) region_ids = list(set(region_ids)) with thrift_client('ers') as ers: restaurant_ids = ers.mget_restaurant_in_region(region_ids, True) return q.filter( RestaurantRecruitment.restaurant_id.in_(restaurant_ids)).scalar()
def count_by_uid(user_id, status=None): q = DBSession().query(func.count(RestaurantRecruitment.id)).\ filter(RestaurantRecruitment.restaurant_id > 0) if status is not None: q = q.filter(RestaurantRecruitment.status == status) # if super admin if current_user.is_super_admin(): return q.scalar() with thrift_client('ers') as ers: user_struct = ers.get_direct_struct(user_id) # if city.admin if user_struct.city_ids: return q.filter( RestaurantRecruitment.city_id.in_(user_struct.city_ids)).all().scalar() region_ids = [] # if region_group.admin if user_struct.region_group_ids: with thrift_client('ers') as ers: regions = ers.get_regions_by_region_group_ids( user_struct.region_group_ids) region_ids = [region.id for region in regions] # if region.admin if user_struct.region_ids: region_ids.extend(user_struct.region_ids) region_ids = list(set(region_ids)) with thrift_client('ers') as ers: restaurant_ids = ers.mget_restaurant_in_region(region_ids, True) return q.filter(RestaurantRecruitment.restaurant_id.in_(restaurant_ids)).scalar()
def _get_current_user_relative_city_ids(): return get_city_ids_by_user() if current_user.is_super_admin() else get_marketman_relative_city_ids(current_user.id)
def _get_current_user_relative_city_ids(): return get_city_ids_by_user() if current_user.is_super_admin( ) else get_marketman_relative_city_ids(current_user.id)