Ejemplo n.º 1
0
    def get_queryset(self):  # pylint: disable=method-hidden
        model_cls = self.get_model_cls()
        model_name = model_cls._meta.model_name
        model_perms = self.get_model_permissions()

        # Grab the perms for either the users or groups
        perm_map_func = self.switch_user_group(
            lambda: get_users_with_model_perms(model_cls, attach_perms=True,
                                               with_group_users=False),
            lambda: get_groups_with_model_perms(model_cls, attach_perms=True),
        )

        # Do this as a function so we don't fetch both the user AND group permissions on each
        # request
        perm_map = perm_map_func()

        ret = []
        sorted_perms = sorted(perm_map.items(), key=lambda x: getattr(x[0], self.lookup_field))
        for auth_obj, perms in sorted_perms:
            new_perms = [self._transform_perm(model_name)(perm) for perm in perms]

            ret.append({
                self.get_user_or_group(): auth_obj,
                'permissions': _filter_perms(model_perms, new_perms),
            })
        return ret
Ejemplo n.º 2
0
    def test_groups_with_model_perms(self):
        for perm in CloudAccount.model_permissions:
            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=False,
            )

            self.assertEqual(groups.count(), 0)

            assign_perm('cloud.%s_cloudaccount' % perm, self.group)

            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=False,
            )

            self.assertEqual(groups.count(), 1)
            self.assertEqual(groups.first(), self.group)

            remove_perm('cloud.%s_cloudaccount' % perm, self.group)
Ejemplo n.º 3
0
    def test_groups_with_model_perms(self):
        for perm in CloudAccount.model_permissions:
            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=False,
            )

            self.assertEqual(groups.count(), 0)

            assign_perm('cloud.%s_cloudaccount' % perm, self.group)

            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=False,
            )

            self.assertEqual(groups.count(), 1)
            self.assertEqual(groups.first(), self.group)

            remove_perm('cloud.%s_cloudaccount' % perm, self.group)
Ejemplo n.º 4
0
    def test_groups_with_model_perms_attach_perms(self):
        for perm in CloudAccount.model_permissions:
            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=True,
            )

            self.assertIsInstance(groups, dict)
            self.assertEqual(len(groups), 0)

            assign_perm('cloud.%s_cloudaccount' % perm, self.group)

            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=True,
            )

            self.assertIsInstance(groups, dict)
            self.assertEqual(len(groups), 1)
            self.assertTrue(self.group in groups)
            self.assertEqual(groups[self.group], ['%s_cloudaccount' % perm])

            remove_perm('cloud.%s_cloudaccount' % perm, self.group)
Ejemplo n.º 5
0
    def test_groups_with_model_perms_attach_perms(self):
        for perm in CloudAccount.model_permissions:
            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=True,
            )

            self.assertIsInstance(groups, dict)
            self.assertEqual(len(groups), 0)

            assign_perm('cloud.%s_cloudaccount' % perm, self.group)

            groups = shortcuts.get_groups_with_model_perms(
                CloudAccount,
                attach_perms=True,
            )

            self.assertIsInstance(groups, dict)
            self.assertEqual(len(groups), 1)
            self.assertTrue(self.group in groups)
            self.assertEqual(groups[self.group], ['%s_cloudaccount' % perm])

            remove_perm('cloud.%s_cloudaccount' % perm, self.group)