Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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 []
Exemplo n.º 11
0
 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()
Exemplo n.º 12
0
 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()
Exemplo n.º 13
0
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 []
Exemplo n.º 14
0
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))
Exemplo n.º 15
0
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))
Exemplo n.º 16
0
        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)
Exemplo n.º 17
0
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
Exemplo n.º 18
0
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
Exemplo n.º 19
0
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 []
Exemplo n.º 20
0
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()
Exemplo n.º 21
0
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()
Exemplo n.º 22
0
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)
Exemplo n.º 23
0
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)