def filter_by_roles(self, role = None, user=None, types=None, group=None, public=True, page=1, orderBy='name', orderType='asc', numResults=10, search_text='', expression={}): roles = Roles[Roles.index(Role.objects.get(name=role).name):] if user: if public: role_relations = PrincipalRoleRelation.objects.filter( Q(user=user) | Q(group__in=user.groups.all()) | Q(group=None, user=None), role__name__in=roles, content_type__name='resource' ) else: role_relations = PrincipalRoleRelation.objects.filter( Q(user=user) | Q(group__in=user.groups.all()), role__name__in=roles, content_type__name='resource' ) elif group: if public: role_relations = PrincipalRoleRelation.objects.filter( Q(group=group) | Q(group=None, user=None), role__name__in=roles, content_type__name = 'resource' ) else: role_relations = PrincipalRoleRelation.objects.filter( Q(group=group), role__name__in=roles, content_type__name = 'resource' ) else: return get_resources_metadata_by_list() if types == None: resources = self.filter(pk__in=role_relations.values_list('content_id', flat=True)) else: resources = self.filter(pk__in=role_relations.values_list('content_id', flat=True), type=types) resources_metadata = get_resources_metadata_by_list(resources.values_list('global_id', flat=True), page=page, numResults=numResults, orderBy=orderBy, orderType=orderType, search_text=search_text, filters=expression) resources = [] if resources_metadata.get('resource_metadata', []): for resource in resources_metadata['resource_metadata']: r = self.get(metadata=False, global_id=resource.value['globalID']) roles = role_relations.filter(content_id=r.id).values_list('role__name', flat=True) r.is_manager = "Manager" in roles or "Owner" in roles r.is_editor = "Editor" in roles or "Manager" in roles or "Owner" in roles r.is_reader = "Reader" in roles or "Editor" in roles or "Manager" in roles or "Owner" in roles r.metadata = resource.value resources.append(r) else: resources_metadata['resource_metadata'] = [] resources_metadata['data'] = resources return resources_metadata
def all_metadata(self, page=1, orderBy='name', orderType='asc'): resources = super(ResourceManager, self).all().values_list('global_id', flat=True) resources_metadata = get_resources_metadata_by_list(resources, page=page, numResults=100, orderBy=orderBy, orderType=orderType) resources = [] if resources_metadata: for resource in resources_metadata['resource_metadata']: r = self.get(metadata=False, global_id=resource.value['globalID']) r.metadata = resource.value resources.append(r) resources_metadata['data'] = resources return resources_metadata