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
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
def user_has_role(user, role): return role in get_roles(user)
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'Значение сохранено.'}
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