Пример #1
0
    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])
            })
Пример #2
0
    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])})
Пример #3
0
 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))])
Пример #4
0
 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))])
Пример #5
0
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)
Пример #6
0
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)