def test_get_user_roles_on_sites_ids(self): no_role_user = User.objects.create(username='******', is_staff=True) self.assertDictEqual(get_user_roles_on_sites_ids(no_role_user), {}) self._create_simple_setup() bob = User.objects.get(username='******') bar_site = Site.objects.get(name='bar.site.com') writer_role = Role.objects.get(name='writer') # bob is writer on bar_site self.assertDictEqual(get_user_roles_on_sites_ids(bob), {writer_role.id: set([bar_site.id])}) editor_role = Role.objects.get(name='editor') foo_site = Site.objects.get(name='foo.site.com') editor_role.grant_to_user(bob, foo_site) # bob is editor on foo_site and writer on bar_site self.assertDictEqual(get_user_roles_on_sites_ids(bob), { editor_role.id: set([foo_site.id]), writer_role.id: set([bar_site.id]) }) joe = User.objects.get(username='******') admin_role = Role.objects.get(name='site admin') self.assertDictEqual(get_user_roles_on_sites_ids(joe), { admin_role.id: set([foo_site.id, bar_site.id]), }) robin = User.objects.get(username='******') developer_role = Role.objects.get(name='developer') # dev on bar self.assertDictEqual( get_user_roles_on_sites_ids(robin), { editor_role.id: set([foo_site.id]), developer_role.id: set([bar_site.id]) })
def test_get_user_roles_on_sites_ids(self): no_role_user = User.objects.create( username='******', is_staff=True) self.assertDictEqual(get_user_roles_on_sites_ids(no_role_user), {}) self._create_simple_setup() bob = User.objects.get(username='******') bar_site = Site.objects.get(name='bar.site.com') writer_role = Role.objects.get(name='writer') # bob is writer on bar_site self.assertDictEqual(get_user_roles_on_sites_ids(bob), {writer_role.id: set([bar_site.id])}) editor_role = Role.objects.get(name='editor') foo_site = Site.objects.get(name='foo.site.com') editor_role.grant_to_user(bob, foo_site) # bob is editor on foo_site and writer on bar_site self.assertDictEqual(get_user_roles_on_sites_ids(bob), { editor_role.id: set([foo_site.id]), writer_role.id: set([bar_site.id])}) joe = User.objects.get(username='******') admin_role = Role.objects.get(name='site admin') self.assertDictEqual(get_user_roles_on_sites_ids(joe), { admin_role.id: set([foo_site.id, bar_site.id]), }) robin = User.objects.get(username='******') developer_role = Role.objects.get(name='developer') # dev on bar self.assertDictEqual(get_user_roles_on_sites_ids(robin), { editor_role.id: set([foo_site.id]), developer_role.id: set([bar_site.id])})
def __init__(self, *args, **kwargs): check_roles = kwargs.pop('check_roles', False) super(BaseUserFormSet, self).__init__(*args, **kwargs) if not check_roles: return for form in self.forms: if not form.initial: continue user = form.initial['user'] site = form.initial['current_site'] roles_with_sites = get_user_roles_on_sites_ids(user) roles_for_current_site = [] for role_id, sites_ids in roles_with_sites.items(): if site.id in sites_ids: roles_for_current_site.append(role_id) if len(roles_for_current_site) <= 1: continue role_names = Role.objects.filter( id__in=roles_for_current_site).values_list('name', flat=True) form._errors = ErrorDict() form._errors['__all__'] = ErrorList([ 'User %s has multiple roles: %s. ' 'A user can\'t have multiple roles in the same site. ' 'Unassign this user until this error disappears.' % ( user.email or user.username, ', '.join(role_names))])
def __init__(self, *args, **kwargs): check_roles = kwargs.pop('check_roles', False) super(BaseUserFormSet, self).__init__(*args, **kwargs) if not check_roles: return for form in self.forms: if not form.initial: continue user = form.initial['user'] site = form.initial['current_site'] roles_with_sites = get_user_roles_on_sites_ids(user) roles_for_current_site = [] for role_id, sites_ids in roles_with_sites.items(): if site.id in sites_ids: roles_for_current_site.append(role_id) if len(roles_for_current_site) <= 1: continue role_names = Role.objects.filter( id__in=roles_for_current_site).values_list('name', flat=True) form._errors = ErrorDict() form._errors['__all__'] = ErrorList([ 'User %s has multiple roles: %s. ' 'A user can\'t have multiple roles in the same site. ' 'Unassign this user until this error disappears.' % ( user.email or user.username, ', '.join(role_names))])
def clear_roles_for_inactive_user(instance, **kwargs): if instance.is_active: return from cmsroles.siteadmin import get_user_roles_on_sites_ids roles_on_sites = get_user_roles_on_sites_ids(instance) for role in Role.objects.filter(id__in=roles_on_sites.keys()): for site in Site.objects.filter(id__in=roles_on_sites[role.id]): role.ungrant_from_user(instance, site)
def clear_roles_for_inactive_user(instance, **kwargs): if instance.is_active: return from cmsroles.siteadmin import get_user_roles_on_sites_ids roles_on_sites = get_user_roles_on_sites_ids(instance) for role in Role.objects.filter(id__in=roles_on_sites.keys()): for site in Site.objects.filter(id__in=roles_on_sites[role.id]): role.ungrant_from_user(instance, site)