Ejemplo n.º 1
0
    def test_get_users_for_role(self):
        self.role3.give_to_permittee(self.u1, can_delegate=True)
        self.role3.give_to_permittee(self.u2, can_delegate=False)
        self.role1.give_to_permittee(self.u3, can_delegate=True)
        
        users = get_users_for_role(self.role3, can_delegate=False)
        self.assertEqual(users.count(), 2)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u2 in users)

        users = get_users_for_role(self.role3, can_delegate=True)
        self.assertEqual(users.count(), 1)
        self.assertTrue(self.u1 in users)

        users = get_users_for_role(self.role1, can_delegate=False)
        self.assertEqual(users.count(), 3)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u2 in users)
        self.assertTrue(self.u3 in users)

        users = get_users_for_role(self.role1, can_delegate=True)
        self.assertEqual(users.count(), 2)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u3 in users)
        
Ejemplo n.º 2
0
    def test_get_users_for_role(self):
        self.role3.give_to_permittee(self.u1, can_delegate=True)
        self.role3.give_to_permittee(self.u2, can_delegate=False)
        self.role1.give_to_permittee(self.u3, can_delegate=True)

        users = get_users_for_role(self.role3, can_delegate=False)
        self.assertEqual(users.count(), 2)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u2 in users)

        users = get_users_for_role(self.role3, can_delegate=True)
        self.assertEqual(users.count(), 1)
        self.assertTrue(self.u1 in users)

        users = get_users_for_role(self.role1, can_delegate=False)
        self.assertEqual(users.count(), 3)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u2 in users)
        self.assertTrue(self.u3 in users)

        users = get_users_for_role(self.role1, can_delegate=True)
        self.assertEqual(users.count(), 2)
        self.assertTrue(self.u1 in users)
        self.assertTrue(self.u3 in users)
Ejemplo n.º 3
0
def make_request(request, permission, permittee, target_obj_or_class,
                 redirect_to=None):
    """When a permission is missing allow user to request a role.
    
    Show the user a list of roles that have the missing permission, and
    allow her to request the permission from a user who can give that role.
    
    @see: L{ExpedientPermission} for information about permission redirection.
    """
    
    if permittee != request.user:
        raise PermissionDenied
    
    assert(isinstance(permittee, User))
    try:
        done_url = request.session["breadcrumbs"][-1][1]
    except IndexError:
        done_url = reverse("home")
    # get all the roles that have this permission
    roles = ProjectRole.objects.filter_for_permission(
        permission.name, target_obj_or_class)
   
    if not roles:
       return simple.direct_to_template(
        request,
        template=TEMPLATE_PATH+"/no_permission.html",
        extra_context={
            "cancel_url": done_url,
            "target": target_obj_or_class,
        }
        )
 
    # for each role get the users that can delegate it
    roles_to_users = {}
    for r in roles:
        givers = get_users_for_role(r, can_delegate=True)
        roles_to_users[r.id] = givers

    if request.method == "POST":
        req = ProjectRoleRequest(requester=request.user)
        form = SelectRoleForm(
            roles, roles_to_users, request.POST, instance=req)
        if form.is_valid():
            req = form.save()
            DatedMessage.objects.post_message_to_user(
                "Request for '%s' role in project '%s' sent to user '%s'"
                    % (req.requested_role.name,
                       req.requested_role.project,
                       req.giver.username),
                user=request.user,
                msg_type=DatedMessage.TYPE_SUCCESS)
            return HttpResponseRedirect(done_url)
    else:
        form = SelectRoleForm(
            roles, roles_to_users)

    return simple.direct_to_template(
        request,
        template=TEMPLATE_PATH+"/make_request.html",
        extra_context={
            "cancel_url": done_url,
            "form": form,
            "target": target_obj_or_class,
        }
    )
Ejemplo n.º 4
0
def make_request(request,
                 permission,
                 permittee,
                 target_obj_or_class,
                 redirect_to=None):
    """When a permission is missing allow user to request a role.
    
    Show the user a list of roles that have the missing permission, and
    allow her to request the permission from a user who can give that role.
    
    @see: L{ExpedientPermission} for information about permission redirection.
    """

    if permittee != request.user:
        raise PermissionDenied

    assert (isinstance(permittee, User))
    try:
        done_url = request.session["breadcrumbs"][-1][1]
    except IndexError:
        done_url = reverse("home")
    # get all the roles that have this permission
    roles = ProjectRole.objects.filter_for_permission(permission.name,
                                                      target_obj_or_class)

    if not roles:
        return simple.direct_to_template(request,
                                         template=TEMPLATE_PATH +
                                         "/no_permission.html",
                                         extra_context={
                                             "cancel_url": done_url,
                                             "target": target_obj_or_class,
                                         })

    # for each role get the users that can delegate it
    roles_to_users = {}
    for r in roles:
        givers = get_users_for_role(r, can_delegate=True)
        roles_to_users[r.id] = givers

    if request.method == "POST":
        req = ProjectRoleRequest(requester=request.user)
        form = SelectRoleForm(roles,
                              roles_to_users,
                              request.POST,
                              instance=req)
        if form.is_valid():
            req = form.save()
            DatedMessage.objects.post_message_to_user(
                "Request for '%s' role in project '%s' sent to user '%s'" %
                (req.requested_role.name, req.requested_role.project,
                 req.giver.username),
                user=request.user,
                msg_type=DatedMessage.TYPE_SUCCESS)
            return HttpResponseRedirect(done_url)
    else:
        form = SelectRoleForm(roles, roles_to_users)

    return simple.direct_to_template(request,
                                     template=TEMPLATE_PATH +
                                     "/make_request.html",
                                     extra_context={
                                         "cancel_url": done_url,
                                         "form": form,
                                         "target": target_obj_or_class,
                                     })