Beispiel #1
0
def update_user_roles(domain_link):
    if domain_link.is_remote:
        master_results = remote_get_user_roles(domain_link)
    else:
        master_results = local_get_user_roles(domain_link.master_domain)

    _convert_reports_permissions(domain_link, master_results)

    local_roles = UserRole.view(
        'users/roles_by_domain',
        startkey=[domain_link.linked_domain],
        endkey=[domain_link.linked_domain, {}],
        include_docs=True,
        reduce=False,
    )
    local_roles_by_name = {role.name: role for role in local_roles}
    for role_def in master_results:
        role = local_roles_by_name.get(role_def['name'])
        if role:
            role_json = role.to_json()
        else:
            role_json = {'domain': domain_link.linked_domain}

        role_json.update(role_def)
        UserRole.wrap(role_json).save()
Beispiel #2
0
def update_user_roles(domain_link):
    if domain_link.is_remote:
        master_results = remote_get_user_roles(domain_link)
    else:
        master_results = local_get_user_roles(domain_link.master_domain)

    _convert_web_apps_permissions(domain_link, master_results)
    _convert_reports_permissions(domain_link, master_results)

    local_roles = UserRole.view(
        'users/roles_by_domain',
        startkey=[domain_link.linked_domain],
        endkey=[domain_link.linked_domain, {}],
        include_docs=True,
        reduce=False,
    )
    local_roles_by_name = {role.name: role for role in local_roles}
    for role_def in master_results:
        role = local_roles_by_name.get(role_def['name'])
        if role:
            role_json = role.to_json()
        else:
            role_json = {'domain': domain_link.linked_domain}

        role_json.update(role_def)
        UserRole.wrap(role_json).save()
Beispiel #3
0
def update_user_roles(domain_link):
    if domain_link.is_remote:
        master_results = remote_get_user_roles(domain_link)
    else:
        master_results = local_get_user_roles(domain_link.master_domain)

    _convert_reports_permissions(domain_link, master_results)

    local_roles = UserRole.view(
        'users/roles_by_domain',
        startkey=[domain_link.linked_domain],
        endkey=[domain_link.linked_domain, {}],
        include_docs=True,
        reduce=False,
    )
    local_roles_by_name = {}
    local_roles_by_upstream_id = {}
    for role in local_roles:
        local_roles_by_name[role.name] = role
        if role.upstream_id:
            local_roles_by_upstream_id[role.upstream_id] = role

    # Update downstream roles based on upstream roles
    for role_def in master_results:
        role = local_roles_by_upstream_id.get(
            role_def['_id']) or local_roles_by_name.get(role_def['name'])
        if role:
            role_json = role.to_json()
        else:
            role_json = {'domain': domain_link.linked_domain}
        role_json['upstream_id'] = role_def['_id']

        upstream_role = copy(role_def)
        upstream_role.pop('_id')
        upstream_role.pop('upstream_id')
        role_json.update(upstream_role)
        local_roles_by_upstream_id[role_json['upstream_id']] = role_json
        UserRole.wrap(role_json).save()

    # Update assignable_by ids - must be done after main update to guarantee all local roles have ids
    for role in local_roles_by_upstream_id.values():
        if role['assignable_by']:
            role['assignable_by'] = [
                local_roles_by_upstream_id[role_id]['_id']
                for role_id in role['assignable_by']
            ]
            UserRole.wrap(role).save()
Beispiel #4
0
def update_user_roles(domain_link):
    if domain_link.is_remote:
        master_results = remote_get_user_roles(domain_link)
    else:
        master_results = local_get_user_roles(domain_link.master_domain)

    _convert_reports_permissions(domain_link, master_results)

    local_roles = UserRole.objects.get_by_domain(domain_link.linked_domain, include_archived=True)
    local_roles_by_name = {}
    local_roles_by_upstream_id = {}
    for role in local_roles:
        local_roles_by_name[role.name] = role
        if role.upstream_id:
            local_roles_by_upstream_id[role.upstream_id] = role

    # Update downstream roles based on upstream roles
    for role_def in master_results:
        role = local_roles_by_upstream_id.get(role_def['_id']) or local_roles_by_name.get(role_def['name'])
        if not role:
            role = UserRole(domain=domain_link.linked_domain)
        local_roles_by_upstream_id[role_def['_id']] = role
        role.upstream_id = role_def['_id']

        role.name = role_def["name"]
        role.default_landing_page = role_def["default_landing_page"]
        role.is_non_admin_editable = role_def["is_non_admin_editable"]
        role.save()

        permissions = Permissions.wrap(role_def["permissions"])
        role.set_permissions(permissions.to_list())

    # Update assignable_by ids - must be done after main update to guarantee all local roles have ids
    for role_def in master_results:
        local_role = local_roles_by_upstream_id[role_def['_id']]
        assignable_by = []
        if role_def["assignable_by"]:
            assignable_by = [
                local_roles_by_upstream_id[role_id].id
                for role_id in role_def["assignable_by"]
            ]
        local_role.set_assignable_by(assignable_by)