def workflow_object_add(request, workflow_id): workflow = get_object_or_404(Workflow, id=workflow_id) if request.method == 'POST': # If the form has been submitted... #form = WorkflowObjectAddModelForm(request.POST) # A form bound to the POST data if request.POST['name']: # All validation rules pass workflow_object = Workflow_object.objects.create( name=request.POST['name']) set_workflow(workflow_object, workflow) #grant permission roles = Role.objects.all() view = get_object_or_404(Permission, codename='view') edit = get_object_or_404(Permission, codename='edit') for role in roles: grant_permission(workflow_object, role, view) return HttpResponseRedirect( reverse('workflows.tools.views.workflows_list')) else: form = WorkflowObjectAddForm() # An unbound form return render_to_response('workflow/workflow_object_add.html', { 'form': form, 'workflow': workflow, }, context_instance=RequestContext(request))
def test_available_datasets_for_user(self): """ """ # отчет новый dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) datasets = get_datasets(self.test_viewer) self.assertEqual(datasets[0].name, u"Название отчета") self.assertEqual(len(datasets), 1) self.assertEqual(len(datasets[0].fields.all()), 0)
def test_permission_checking(self): """ Проверка установки разрешений для датасета """ dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(dataset, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) grant_permission(dataset, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) self.assertEqual( has_permission(dataset, self.test_viewer, settings.PERMISSION_VIEW_NAME), True) self.assertEqual( has_permission(dataset, self.test_viewer, settings.PERMISSION_EDIT_NAME), False) self.assertEqual( has_permission(dataset, self.test_editor, settings.PERMISSION_VIEW_NAME), True) self.assertEqual( has_permission(dataset, self.test_editor, settings.PERMISSION_EDIT_NAME), True)
def test_data_setting(self): """ Проверка установки значения через DataSet """ self.create_boiler() # отчет новый dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) # Добавить поле, которое не зависит от категорий расхода топлива и воды field = DatasetField() field.creator = self.test_admin field.model_content_type = ContentType.objects.get( model='electricityconsumption') field.model_field_name = u'actual_day' field.name = u'Фактический расход электричества' field.description = u"Фактический расход" field.save() grant_permission(field, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) field.dataset_set.add(dataset) # self.field1.set_value() self.assertRaises(PermissionDenied, field.set_value, self.test_viewer, get_today(), 0.1, self.boiler_obj, None, None) grant_permission(field, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) val = 5.2 field.set_value(self.test_editor, get_today(), val, self.boiler_obj, None, None) current_val, entity = field.get_value(self.test_editor, get_today(), self.boiler_obj, None, None) self.assertEqual(current_val, val)
def test_permission_checking(self): # тип данных source_ct = ContentType.objects.get(model='fuelconsumption', app_label='fuel') # поле доступное для отчета из типа данных source_field = source_ct.model_class().DescriptorMeta.fields[0] field = DatasetField.objects.create(creator=self.test_admin, model_field_name=source_field, model_content_type=source_ct) grant_permission(field, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(field, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) grant_permission(field, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) self.assertEqual( has_permission(field, self.test_viewer, settings.PERMISSION_VIEW_NAME), True) self.assertEqual( has_permission(field, self.test_viewer, settings.PERMISSION_EDIT_NAME), False) self.assertEqual( has_permission(field, self.test_editor, settings.PERMISSION_VIEW_NAME), True) self.assertEqual( has_permission(field, self.test_editor, settings.PERMISSION_EDIT_NAME), True)
def make_counterpart(self, negotiation): role = (local_rol for local_rol in get_local_roles(negotiation, self) if local_rol in {client_role(), seller_role()}).next() remove_permission(negotiation, role, last_updater_permission()) grant_permission(negotiation, role, counterpart_permission())
def test_load_report_data(self): self.create_boiler() # диапазон дат для которых нужно загрузить данные по отчету date_range = [get_today(), get_today()] # отчет новый dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) # Добавить поле, которое не зависит от категорий расхода топлива и воды field = DatasetField() field.creator = self.test_admin field.model_content_type = ContentType.objects.get( model='electricityconsumption') field.model_field_name = 'actual_day' field.name = 'Фактический расход электричества' field.description = "Фактический расход" field.save() grant_permission(field, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) field.dataset_set.add(dataset) # Должны быть данные для полей: ID, Дата, Наименование котельной, Раход электричества. dataset_data = get_data(dataset, self.test_admin, date_range, [self.boiler_obj]) self.assertEqual(dataset_data[0][0], self.boiler_obj.id) self.assertEqual(dataset_data[0][1].day, get_today().day) self.assertEqual(dataset_data[0][2], self.boiler_obj.name) self.assertEqual(dataset_data[0][3], 0.0) # Добавить поле зависящее от категории расхода воды field_water = DatasetField() field_water.creator = self.test_admin field_water.model_content_type = ContentType.objects.get( model='waterconsumption') field_water.model_field_name = 'actual_day' field_water.name = 'Фактический расход' field_water.description = "Фактический расход воды" field_water.save() field_water.dataset_set.add(dataset) grant_permission(field_water, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) # Должны быть данные для полей: Идентификатор котельной, # Дата, Наименование котельной, WID, Наименование категории, # Раход электричества, Расход воды dataset_data = get_data(dataset, self.test_admin, date_range, [self.boiler_obj]) self.assertEqual(dataset_data[0][0], self.boiler_obj.id) self.assertEqual(dataset_data[0][1].day, get_today().day) self.assertEqual(dataset_data[0][2], self.boiler_obj.name) self.assertEqual(dataset_data[0][3], self.water_category.id) self.assertEqual(dataset_data[0][4], self.water_category.name) self.assertEqual(dataset_data[0][5], 0.0) self.assertEqual(dataset_data[0][6], 0.0) field_fuel = DatasetField() field_fuel.creator = self.test_admin field_fuel.model_content_type = ContentType.objects.get( model='fuelconsumption') field_fuel.model_field_name = 'actual_day' field_fuel.name = 'Фактический расход топлива' field_fuel.description = "Фактический расход топлива в сутки" field_fuel.save() field_fuel.dataset_set.add(dataset) grant_permission(field_fuel, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) # Должны быть данные для полей: Идентификатор котельной, # Дата, Наименование котельной, Раход электричества, Расход воды, # Идентификатор вида топлива, наименование топлива, марка топлива, # Расход топлива dataset_data = get_data(dataset, self.test_admin, date_range, [self.boiler_obj]) self.assertEqual(dataset_data[0][0], self.boiler_obj.id) self.assertEqual(dataset_data[0][1].day, get_today().day) self.assertEqual(dataset_data[0][2], self.boiler_obj.name) self.assertEqual(dataset_data[0][3], self.water_category.id) self.assertEqual(dataset_data[0][4], self.water_category.name) self.assertEqual(dataset_data[0][5], self.fuel_info.id) self.assertEqual(dataset_data[0][6], self.fuel_info.type) self.assertEqual(dataset_data[0][7], 0.0) self.assertEqual(dataset_data[0][8], 0.0) self.assertEqual(dataset_data[0][9], 0.0) # Добавляем info = FuelInfo.objects.create(boiler=self.boiler_obj, creator=self.test_admin, type=u"Coal") # Должны быть данные для полей: Идентификатор котельной, # Дата, Наименование котельной, Раход электричества, Расход воды, # Идентификатор вида топлива, наименование топлива, марка топлива, # Расход топлива # Данных должно быть 2 ряда dataset_data = get_data(dataset, self.test_admin, date_range, [self.boiler_obj]) self.assertEqual(dataset_data[0][0], self.boiler_obj.id) self.assertEqual(dataset_data[0][1].day, get_today().day) self.assertEqual(dataset_data[0][2], self.boiler_obj.name) self.assertEqual(dataset_data[0][3], self.water_category.id) self.assertEqual(dataset_data[0][4], self.water_category.name) self.assertEqual(dataset_data[0][5], self.fuel_info.id) self.assertEqual(dataset_data[0][6], self.fuel_info.type) self.assertEqual(dataset_data[0][7], 0.0) self.assertEqual(dataset_data[0][8], 0.0) self.assertEqual(dataset_data[0][9], 0.0) self.assertEqual(dataset_data[1][0], self.boiler_obj.id) self.assertEqual(dataset_data[1][1].day, get_today().day) self.assertEqual(dataset_data[1][2], self.boiler_obj.name) self.assertEqual(dataset_data[1][3], self.water_category.id) self.assertEqual(dataset_data[1][4], self.water_category.name) self.assertEqual(dataset_data[1][5], info.id) self.assertEqual(dataset_data[1][6], info.type) self.assertEqual(dataset_data[1][7], 0.0) self.assertEqual(dataset_data[1][8], 0.0) self.assertEqual(dataset_data[1][9], 0.0)
def test_get_report_header(self): """ Проверка получения метаданных полей набора данных. """ dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) # Добавить поле, которое не зависит от категорий расхода топлива и воды field = DatasetField() field.creator = self.test_admin field.model_content_type = ContentType.objects.get( model='electricityconsumption') field.model_field_name = 'actual_day' field.name = u'Фактический расход электричества' field.description = u"Фактический расход" field.save() field.dataset_set.add(dataset) grant_permission(field, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) meta = get_fields(dataset, self.test_viewer) # ID, Котельная, Дата, Расход электричества self.assertEqual(len(meta), 4) # Добавить поле зависящее от категории расхода воды # Проверить, что соответствующие мета данные генерируются для нового набора полей field_water = DatasetField() field_water.creator = self.test_admin field_water.model_content_type = ContentType.objects.get( model='waterconsumption') field_water.model_field_name = 'actual_day' field_water.name = u'Фактический расход' field_water.description = u"Фактический расход воды" field_water.save() field_water.dataset_set.add(dataset) grant_permission(field_water, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_VIEW_NAME) meta = get_fields(dataset, self.test_viewer) # ID, Котельная, Дата, WID, Категория, Расход воды, Расход электричества self.assertEqual(len(meta), 7) # Добавить поле зависящее от информации о топливе # Проверить что добавилось поле и информация о топливе field_fuel = DatasetField() field_fuel.creator = self.test_admin field_fuel.model_content_type = ContentType.objects.get( model='fuelconsumption') field_fuel.model_field_name = 'actual_day' field_fuel.name = u'Фактический расход топлива' field_fuel.description = u"Фактический расход топлива в сутки" field_fuel.save() field_fuel.dataset_set.add(dataset) grant_permission(field_fuel, Role.objects.get(name=settings.ROLE_VIEWER_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(field_fuel, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) meta = get_fields(dataset, self.test_viewer) # ID, Котельная, Дата, WID, Категория, FID, Вид топлива, Расход воды, Расход электричества, Расход топлива self.assertEqual(len(meta), 10) self.assertEqual(meta[0]['name'], u'ID') self.assertEqual(meta[1]['name'], u'Дата') self.assertEqual(meta[2]['name'], u'Котельная') self.assertEqual(meta[3]['name'], u'WID') self.assertEqual(meta[4]['name'], u'Категория расхода воды') self.assertEqual(meta[5]['name'], u'FID') self.assertEqual(meta[6]['name'], u'Вид топлива') self.assertEqual(meta[7]['name'], u'Фактический расход электричества') self.assertEqual(meta[8]['name'], u'Фактический расход') self.assertEqual(meta[9]['name'], u'Фактический расход топлива') # Изменяем порядок колонок field_fuel.index = 1 field_fuel.save() field_water.index = 2 field_water.save() meta = get_fields(dataset, self.test_viewer) self.assertEqual(meta[0]['name'], u'ID') self.assertEqual(meta[1]['name'], u'Дата') self.assertEqual(meta[2]['name'], u'Котельная') self.assertEqual(meta[3]['name'], u'WID') self.assertEqual(meta[4]['name'], u'Категория расхода воды') self.assertEqual(meta[5]['name'], u'FID') self.assertEqual(meta[6]['name'], u'Вид топлива') self.assertEqual(meta[7]['name'], u'Фактический расход электричества') self.assertEqual(meta[8]['name'], u'Фактический расход топлива') self.assertEqual(meta[9]['name'], u'Фактический расход')
def test_rows_number(self): """ Проверка рассчета количества строк в наборе данных. """ self.create_boiler() date_range = get_month_range(2011, 1) dataset = Dataset.objects.create(creator=self.test_admin, name=u"Название отчета", description=u"Описание отчета") grant_permission(dataset, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) # Добавить поле, которое не зависит от категорий расхода топлива и воды field = DatasetField() field.creator = self.test_admin field.model_content_type = ContentType.objects.get( model='electricityconsumption') field.model_field_name = 'actual_day' field.name = 'Фактический расход электричества' field.description = "Фактический расход" field.save() field.dataset_set.add(dataset) grant_permission(field, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(field, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не # зависит от категории расхода воды и электричества. # Только пользователь выполняющий роль редактора может увидеть поля. rows_num = get_dataset_rows_number(dataset, self.test_viewer, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 0) rows_num = get_dataset_rows_number(dataset, self.test_editor, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 31) # Добавить поле зависящее от категории расхода воды field_water = DatasetField() field_water.creator = self.test_admin field_water.model_content_type = ContentType.objects.get( model='waterconsumption') field_water.model_field_name = 'actual_day' field_water.name = 'Фактический расход' field_water.description = "Фактический расход воды" field_water.save() field_water.dataset_set.add(dataset) grant_permission(field_water, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(field_water, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не # зависит от категории расхода воды и электричества. # Только пользователь выполняющий роль редактора может увидеть поля. rows_num = get_dataset_rows_number(dataset, self.test_viewer, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 0) rows_num = get_dataset_rows_number(dataset, self.test_editor, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 31) field_fuel = DatasetField() field_fuel.creator = self.test_admin field_fuel.model_content_type = ContentType.objects.get( model='fuelconsumption') field_fuel.model_field_name = 'actual_day' field_fuel.name = 'Фактический расход топлива' field_fuel.description = "Фактический расход топлива в сутки" field_fuel.save() field_fuel.dataset_set.add(dataset) grant_permission(field_fuel, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(field_fuel, Role.objects.get(name=settings.ROLE_EDITOR_NAME), settings.PERMISSION_VIEW_NAME) # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не # зависит от категории расхода воды и электричества. # Только пользователь выполняющий роль редактора может увидеть поля. rows_num = get_dataset_rows_number(dataset, self.test_viewer, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 0) rows_num = get_dataset_rows_number(dataset, self.test_editor, date_range, [self.boiler_obj]) self.assertEqual(rows_num, 62)
from .models import Student view = register_permission("View", "view") edit = register_permission("Edit", "edit") delete = register_permission("Delete", "delete") add = register_permission("Add", "add") manage_content = register_permission("Manage content", "manage_content") school_admin = register_role("Admin") educator = register_role("Educator") guardian = register_role("Guardian") student = register_role("Student") #school_admin permissions grant_permission(Student, school_admin, "view") grant_permission(Student, school_admin, "delete") #educator permissions grant_permission(Student, educator, "view") grant_permission(Student, educator, "edit") grant_permission(Student, educator, "add") #student permissions grant_permission(Student.avatar, student, "edit") grant_permission(Student, student, "view") # grant_permission(Spend_points, student, "add")
def save(self, save_revision=False, *args, **kwargs): """ Сохранить поле набора данных. Если сущность не создана, для нее по умолчанию будут созданы разрешения: Для разработчика - ВСЕ Для менеджера - ВСЕ Для администратора - ВСЕ """ i_need_permission = False if self.id == None: i_need_permission = True #if save_revision: # with reversion.create_revision(): # super(Dataset, self).save( *args, **kwargs) #else: super(Dataset, self).save(*args, **kwargs) # Если нужно создать роли - создаем их. Для новой сущности доступ имеется только # для тех, кто является менеджером, разработчиком или администратором if i_need_permission == True: # Разрешения для менеджера grant_permission(self, Role.objects.get(name=settings.ROLE_MANAGER_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(self, Role.objects.get(name=settings.ROLE_MANAGER_NAME), settings.PERMISSION_VIEW_NAME) grant_permission(self, Role.objects.get(name=settings.ROLE_MANAGER_NAME), settings.PERMISSION_DELETE_NAME) # Разрешения для разработчика grant_permission( self, Role.objects.get(name=settings.ROLE_DEVELOPER_NAME), settings.PERMISSION_EDIT_NAME) grant_permission( self, Role.objects.get(name=settings.ROLE_DEVELOPER_NAME), settings.PERMISSION_VIEW_NAME) grant_permission( self, Role.objects.get(name=settings.ROLE_DEVELOPER_NAME), settings.PERMISSION_DELETE_NAME) # Разрешения для администратора grant_permission(self, Role.objects.get(name=settings.ROLE_ADMIN_NAME), settings.PERMISSION_EDIT_NAME) grant_permission(self, Role.objects.get(name=settings.ROLE_ADMIN_NAME), settings.PERMISSION_VIEW_NAME) grant_permission(self, Role.objects.get(name=settings.ROLE_ADMIN_NAME), settings.PERMISSION_DELETE_NAME)