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
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)
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)
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)
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)