def test_users_with_model_perms_attach_perms(self): for perm in CloudAccount.model_permissions: users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=True, with_group_users=False, with_superusers=False, ) self.assertIsInstance(users, dict) self.assertEqual(len(users), 0) assign_perm('cloud.%s_cloudaccount' % perm, self.user) users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=True, with_group_users=False, with_superusers=False, ) self.assertIsInstance(users, dict) self.assertEqual(len(users), 1) self.assertTrue(self.user in users) self.assertEqual(users[self.user], ['%s_cloudaccount' % perm]) remove_perm('cloud.%s_cloudaccount' % perm, self.user)
def test_users_with_model_perms_wrong_model(self): for perm in CloudAccount.model_permissions: users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=False, with_superusers=False, ) self.assertEqual(users.count(), 0) assign_perm('cloud.%s_cloudimage' % perm, self.user) users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=False, with_superusers=False, ) self.assertEqual(users.count(), 0) # Make sure assigning the group permissions doesn't show up here assign_perm('cloud.%s_cloudimage' % perm, self.group) users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=False, with_superusers=False, ) self.assertEqual(users.count(), 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
def test_users_with_model_perms_with_superusers(self): users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=False, with_superusers=True, ) self.assertEqual(users.count(), 1) self.assertEqual(users.first(), self.admin)
def test_users_with_model_perms_with_groups(self): for perm in CloudAccount.model_permissions: users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=True, with_superusers=False, ) self.assertEqual(users.count(), 0) assign_perm('cloud.%s_cloudaccount' % perm, self.group) users = shortcuts.get_users_with_model_perms( CloudAccount, attach_perms=False, with_group_users=True, with_superusers=False, ) self.assertEqual(users.count(), 1) self.assertEqual(users.first(), self.user) remove_perm('cloud.%s_cloudaccount' % perm, self.group)