Example #1
0
def getUserTokens(user):
    """
    Return the user tokens
    """

    tokens = set()

    for role in get_roles(user):
        tokens.add(role.name)

    for group in user.groups.all():

        if hasattr(group,'vphsharesmartgroup'):
            # check if there is a corresponding vphshare group and if it is active
            vphgroup = group.vphsharesmartgroup
            if vphgroup.active:
                tokens.add(group.name)
                #add also the parents
                tokens.update(vphgroup.get_parents_list_name())
        else:
            # simple group, just add it to the list
            tokens.add(group.name)

    # add default role for all the users
    tokens.update(['VPH', 'vph', user.username ])

    return tokens
Example #2
0
    def to_dict(self):

        user_key = ['username', 'fullname', 'email', 'language', 'country', 'postcode']

        user_dict = {}

        for i in range(0, len(user_key)):
            if getattr(self, user_key[i], None) is not None:
                user_dict[user_key[i]] = getattr(self, user_key[i])
            else:
                user_dict[user_key[i]] = getattr(self.user, user_key[i])

        user_dict['role'] = [self.user.username]
        for role in get_roles(self.user):
            user_dict['role'].append(role.name)
        for group in self.user.groups.all():
            user_dict['role'].append(group.name)

        # add default role for all the users
        if not user_dict['role'].count("VPH"):
            user_dict['role'].append("VPH")
        return user_dict
Example #3
0
def user_has_role(user, role):
    return role in get_roles(user)
Example #4
0
def set_dataset_data(request, field_id, on_date, company_object_id,
                     water_category_id, fuel_info_id, value):
    """
    Установить новое значениче для указанной колонки.
    
    @param on_date: Дата 
    @param field_id: идентификатор колонки
    @param company_object_id: Идентификатор объекта 
    @param water_category_id: Идентификатор категории расхода воды
    @param fuel_info_id: Идентификатор информации о топливе
    @param value: новое значение
    
    @return: Возвращает объект
    """

    try:
        field = DatasetField.objects.get(id=field_id)
        # Дата на которую нужно заполнить значение
        my_date = datetime.strptime(on_date, settings.DATE_FORMAT).date()
        today = get_today()

        # Проверка разрешения установления значения
        if not has_permission(field, request.user,
                              settings.PERMISSION_EDIT_NAME):
            return {
                'success': False,
                'message': u"У вас недостаточно прав для редактирования."
            }

        set_value = False

        user_roles = get_roles(request.user)
        admin = Role.objects.get(name=settings.ROLE_ADMIN_NAME)
        manager = Role.objects.get(name=settings.ROLE_MANAGER_NAME)
        developer = Role.objects.get(name=settings.ROLE_DEVELOPER_NAME)
        editor = Role.objects.get(name=settings.ROLE_EDITOR_NAME)

        # Если пользователь выполняет одну из ролей он может выполнять
        # редактирование в любое время
        if admin in user_roles or manager in user_roles or developer in user_roles:
            set_value = True

        # Если пользователь редактор - может в трехдневный срок редактировать данные
        elif editor in user_roles and (today - my_date).days < 4 and (
                today - my_date).days >= 0:
            set_value = True

        if set_value:

            # Дополнительная проверка разрешения выполнять корректировку.
            if field.model_field_name == 'correct':
                # Даты в которые поле доступно для редактирования
                editable_on_date = (get_month_day(today, 10),
                                    get_month_day(today, 20),
                                    get_month_day(today,
                                                  get_month_last_day(today)))

                if my_date not in editable_on_date:
                    return {
                        'success':
                        False,
                        'message':
                        u"Корректировку можно делать только 10-го, 20-го и в последний день месяца"
                    }

            # Информация о топливе
            fuel_info_obj = None
            if fuel_info_id > 0:
                fuel_info_obj = FuelInfo.objects.get(id=fuel_info_id)

            # Информация о воде
            water_category_obj = None
            if water_category_id > 0:
                water_category_obj = WaterConsumptionCategory.objects.get(
                    id=water_category_id)

            # Котельная
            boiler = BoilerHouse.objects.get(id=company_object_id)
            # Установить значение
            field.set_value(request.user, my_date, value, boiler,
                            water_category_obj, fuel_info_obj)
        else:
            return {
                'success': False,
                'message':
                u"Редактирование доступно только в трехдневный срок."
            }

    except Exception as ex:
        traceback.print_exc(file=sys.stdout)
        _logger.error(u"[dataset.setData] - Не удалось сохранить значение: " +
                      unicode(ex))

        return {
            'success': False,
            'message': u"Не удалось сохранить значение " + unicode(ex)
        }

    return {'success': True, 'message': u'Значение сохранено.'}
Example #5
0
def has_role(user, role):
    if isinstance(role, str):
        role = perm.Role.objects.get(name=role)

    roles = perm.get_roles(user)
    return role in roles
Example #6
0
def has_role(user, role):
    if isinstance(role, str):
        role = perm.Role.objects.get(name=role)

    roles = perm.get_roles(user)
    return role in roles