Example #1
0
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))
Example #2
0
    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)
Example #3
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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
 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())
Example #7
0
    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)
Example #8
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'Фактический расход')
Example #9
0
    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)
Example #10
0
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")



Example #11
0
    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)