def get_user_permission(self,
                         user,
                         expectedCount,
                         model_name='Plot',
                         field_name='owner_orig_id'):
     perms = field_permissions(user, self.instance, model_name)
     return self.get_permission(perms, field_name, expectedCount)
 def test_empty_model_name(self):
     perms = field_permissions(self.user, self.instance)
     self.assertEqual(
         len(perms),
         FieldPermission.objects.filter(instance=self.instance,
                                        role=self.user.get_role(
                                            self.instance)).count())
Example #3
0
def _values_for_model(instance, job, table, model, select, select_params, prefix=None):
    if prefix:
        prefix += "__"
    else:
        prefix = ""

    prefixed_names = []
    model_class = safe_get_model_class(model)
    dummy_instance = model_class()

    for field_name in (
        perm.field_name
        for perm in field_permissions(job.user, instance, model)
        if perm.permission_level >= FieldPermission.READ_ONLY
    ):
        prefixed_name = prefix + field_name

        if field_name.startswith("udf:"):
            name = field_name[4:]
            if name in model_class.collection_udf_settings.keys():
                field_definition_id = None
                for udfd in udf_defs(instance, model):
                    if udfd.iscollection and udfd.name == name:
                        field_definition_id = udfd.id

                if field_definition_id is None:
                    continue

                select[
                    prefixed_name
                ] = """
                    WITH formatted_data AS (
                        SELECT concat('(', data, ')') as fdata
                        FROM %s
                        WHERE field_definition_id = %s and model_id = %s.id
                    )

                    SELECT array_to_string(array_agg(fdata), ', ', '*')
                    FROM formatted_data
                    """ % (
                    UserDefinedCollectionValue._meta.db_table,
                    field_definition_id,
                    table,
                )
            else:
                select[prefixed_name] = "{0}.udfs->%s".format(table)
                select_params.append(name)
        else:
            if not model_hasattr(dummy_instance, field_name):
                # Exception will be raised downstream if you look for
                # a field on a model that no longer exists but still
                # has a stale permission record. Here we check for that
                # case and don't include the field if it does not exist.
                continue

        prefixed_names.append(prefixed_name)

    return prefixed_names
 def test_empty_model_name(self):
     perms = field_permissions(self.user, self.instance)
     self.assertEqual(len(perms), FieldPermission.objects.filter(
         instance=self.instance, role=self.user.get_role(self.instance))
         .count())
 def get_user_permission(self, user, expectedCount, model_name='Plot',
                         field_name='owner_orig_id'):
     perms = field_permissions(user, self.instance, model_name)
     return self.get_permission(perms, field_name, expectedCount)