Esempio n. 1
0
def graph_collaborators(request, graph_slug):
    # Only graph owner should be able to do this
    graph = get_object_or_404(Graph, slug=graph_slug)
    if request.user != graph.owner:
        return redirect('%s?next=%s' % (reverse("signin"), request.path))
    users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID)
    all_collaborators = guardian.get_users_with_perms(graph)
    collaborators = list(
        all_collaborators.exclude(
            id__in=[request.user.id, settings.ANONYMOUS_USER_ID]))
    if request.POST:
        data = request.POST.copy()
        form = AddCollaboratorForm(data=data,
                                   graph=graph,
                                   collaborators=collaborators)
        if form.is_valid():
            user_id = form.cleaned_data["new_collaborator"]
            user = get_object_or_404(User, id=user_id)
            guardian.assign('view_graph', user, graph)
            collaborators.append(user)
    else:
        form = AddCollaboratorForm(graph=graph, collaborators=collaborators)
    graph_permissions = guardian.get_perms_for_model(graph)
    permissions_list = []
    permissions_table = []
    aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data))
    for item in aux:
        for p in PERMISSIONS[item[0]].values():
            permissions_list.append(p)
    for user in collaborators:
        permission_row = {}
        permission_row['user_id'] = user.id
        permission_row['user_name'] = user.username
        permission_row['perms'] = []
        for item_str, item_obj in aux:
            user_permissions = guardian.get_perms(user, item_obj)
            for p in PERMISSIONS[item_str].keys():
                if p in user_permissions:
                    permission_row['perms'].append((item_str, p, True))
                else:
                    permission_row['perms'].append((item_str, p, False))
        permissions_table.append(permission_row)
    #users = [u for u in users if u != graph.owner and u not in collaborators]
    return render_to_response('graphs_collaborators.html', {
        "graph": graph,
        "permissions": permissions_list,
        "permissions_table": permissions_table,
        "form": form
    },
                              context_instance=RequestContext(request))
Esempio n. 2
0
def graph_collaborators(request, graph_slug):
    # Only graph owner should be able to do this
    graph = get_object_or_404(Graph, slug=graph_slug)
    if request.user != graph.owner:
        return redirect('%s?next=%s' % (reverse("signin"), request.path))
    # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID)
    all_collaborators = guardian.get_users_with_perms(graph)
    collaborators = all_collaborators.exclude(id__in=[request.user.id,
                                              settings.ANONYMOUS_USER_ID])
    collaborators = list(collaborators)
    if request.POST:
        data = request.POST.copy()
        form = AddCollaboratorForm(data=data, graph=graph,
                                   collaborators=collaborators)
        if form.is_valid():
            user_id = form.cleaned_data["new_collaborator"]
            user = get_object_or_404(User, id=user_id)
            guardian.assign('view_graph', user, graph)
            collaborators.append(user)
    else:
        form = AddCollaboratorForm(graph=graph, collaborators=collaborators)
    # graph_permissions = guardian.get_perms_for_model(graph)
    permissions_list = []
    permissions_table = []
    aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data))
    for item in aux:
        for p in PERMISSIONS[item[0]].values():
            permissions_list.append(p)
    for user in collaborators:
        permission_row = {}
        permission_row['user_id'] = user.id
        permission_row['user_name'] = user.username
        permission_row['perms'] = []
        for item_str, item_obj in aux:
            user_permissions = guardian.get_perms(user, item_obj)
            for p in PERMISSIONS[item_str].keys():
                if p in user_permissions:
                    permission_row['perms'].append((item_str, p, True))
                else:
                    permission_row['perms'].append((item_str, p, False))
        permissions_table.append(permission_row)
    #users = [u for u in users if u != graph.owner and u not in collaborators]
    return render_to_response('graphs_collaborators.html',
                              {"graph": graph,
                                  "permissions": permissions_list,
                                  "permissions_table": permissions_table,
                                  "form": form},
                              context_instance=RequestContext(request))
Esempio n. 3
0
def graph_collaborators(request, graph_slug):
    graph = get_object_or_404(Graph, slug=graph_slug)
    # Only graph owner was able to change collaborators
    # if request.user != graph.owner:
    #     return redirect('%s?next=%s' % (reverse("signin"), request.path))
    # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID)
    all_collaborators = guardian.get_users_with_perms(graph)
    collaborators = all_collaborators.exclude(
        id__in=[graph.owner.id, request.user.id, settings.ANONYMOUS_USER_ID]
    )
    collaborators = list(collaborators)
    if request.POST:
        data = request.POST.copy()
        form = AddCollaboratorForm(data=data, graph=graph)
        if form.is_valid():
            new_collaborator = form.cleaned_data["new_collaborator"]
            guardian.assign_perm('view_graph', new_collaborator, graph)
            collaborators.append(new_collaborator)
        as_modal = bool(data.get("asModal", False))
    else:
        form = AddCollaboratorForm(graph=graph)
        as_modal = bool(request.GET.get("asModal", False))
    # graph_permissions = guardian.get_perms_for_model(graph)
    permissions_list = []
    permissions_table = []
    aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data))
    for item in aux:
        for p in PERMISSIONS[item[0]].values():
            permissions_list.append(p)
    for user in collaborators:
        permission_row = {}
        permission_row['user_id'] = user.id
        permission_row['user_name'] = user.username
        permission_row['perms'] = []
        for item_str, item_obj in aux:
            user_permissions = guardian.get_perms(user, item_obj)
            for p in PERMISSIONS[item_str].keys():
                if p in user_permissions:
                    permission_row['perms'].append((item_str, p, True))
                else:
                    permission_row['perms'].append((item_str, p, False))
        permissions_table.append(permission_row)
    #users = [u for u in users if u != graph.owner and u not in collaborators]
    '''
    For the modal mini-framework, this view always returns an HTML, because
    after click in 'Add collaborator' it goes again the same page.
    '''
    if as_modal:
        base_template = 'empty.html'
        render = render_to_string
    else:
        base_template = 'base.html'
        render = render_to_response
    add_url = reverse("graph_collaborators", args=[graph_slug])
    broader_context = {"graph": graph,
                       "permissions": permissions_list,
                       "permissions_table": permissions_table,
                       "form": form,
                       "base_template": base_template,
                       "as_modal": as_modal,
                       "add_url": add_url}
    response = render('graphs_collaborators.html', broader_context,
                      context_instance=RequestContext(request))
    if as_modal:
        response = {'type': 'html',
                    'action': 'collaborators',
                    'html': response}
        return HttpResponse(json.dumps(response), status=200,
                            content_type='application/json')
    else:
        return response
Esempio n. 4
0
def graph_collaborators(request, graph_slug):
    graph = get_object_or_404(Graph, slug=graph_slug)
    # Only graph owner was able to change collaborators
    # if request.user != graph.owner:
    #     return redirect('%s?next=%s' % (reverse("signin"), request.path))
    # users = User.objects.all().exclude(pk=settings.ANONYMOUS_USER_ID)
    all_collaborators = guardian.get_users_with_perms(graph)
    collaborators = all_collaborators.exclude(
        id__in=[graph.owner.id, request.user.id, settings.ANONYMOUS_USER_ID]
    )
    collaborators = list(collaborators)
    if request.POST:
        data = request.POST.copy()
        form = AddCollaboratorForm(data=data, graph=graph)
        if form.is_valid():
            new_collaborator = form.cleaned_data["new_collaborator"]
            guardian.assign_perm('view_graph', new_collaborator, graph)
            collaborators.append(new_collaborator)
        as_modal = bool(data.get("asModal", False))
    else:
        form = AddCollaboratorForm(graph=graph)
        as_modal = bool(request.GET.get("asModal", False))
    # graph_permissions = guardian.get_perms_for_model(graph)
    permissions_list = []
    permissions_table = []
    aux = (('graph', graph), ('schema', graph.schema), ('data', graph.data),
           ('reports', graph), ('queries', graph), ('analytics', graph))
    for item in aux:
        for p in PERMISSIONS[item[0]].values():
            permissions_list.append(p)
    for user in collaborators:
        permission_row = {}
        permission_row['user_id'] = user.id
        permission_row['user_name'] = user.username
        permission_row['perms'] = []
        for item_str, item_obj in aux:
            user_permissions = guardian.get_perms(user, item_obj)
            for p in PERMISSIONS[item_str].keys():
                if p in user_permissions:
                    permission_row['perms'].append((item_str, p, True))
                else:
                    permission_row['perms'].append((item_str, p, False))
        permissions_table.append(permission_row)
    # users = [u for u in users if u != graph.owner and u not in collaborators]
    '''
    For the modal mini-framework, this view always returns an HTML, because
    after click in 'Add collaborator' it goes again the same page.
    '''
    if as_modal:
        base_template = 'empty.html'
        render = render_to_string
    else:
        base_template = 'base.html'
        render = render_to_response
    add_url = reverse("graph_collaborators", args=[graph_slug])
    broader_context = {"graph": graph,
                       "permissions": permissions_list,
                       "permissions_table": permissions_table,
                       "form": form,
                       "base_template": base_template,
                       "as_modal": as_modal,
                       "add_url": add_url}
    response = render('graphs_collaborators.html', broader_context,
                      context_instance=RequestContext(request))
    if as_modal:
        response = {'type': 'html',
                    'action': 'collaborators',
                    'html': response}
        return HttpResponse(json.dumps(response), status=200,
                            content_type='application/json')
    else:
        return response