Beispiel #1
0
def update_role(org_id, user_id, new_role):
    current_role = permission_model.get_role(user_id, org_id)
    if not (permission_model.permitted(g.user, org_id, PermissionTags.EDIT_USER) and
            permission_model.role_gte(g.user, org_id, current_role) and
            permission_model.role_gte(g.user, org_id, new_role)):
        raise InsufficientPermission()

    permission_model.set_role(user_id, org_id, new_role)
    return Response(status=204)
Beispiel #2
0
def kick_user(org_id, user_id):
    if not permission_model.permitted(g.user, org_id, PermissionTags.EDIT_USER):
        raise InsufficientPermission()

    if org_model.has_user(org_id, user_id):
        role = permission_model.get_role(user_id, org_id)
        if not permission_model.role_gte(g.user, org_id, role):
            raise InsufficientPermission()
        org_model.remove_user(org_id, user_id)
        events.mediator('kick', user_id=user_id, org_id=org_id)
    else:
        user_model.remove_from_waiting_list(user_id, org_id)

    return Response(status=204)
Beispiel #3
0
def _task_state(org_id=None):
    '''
    Returns a JSON representation of the user's current tasks and queues, used to
    render the client-side DOM.

    For objects a seperate list of their ids is maintained (e.g. tasks and taskmap), this
    is so we can preserve the order of the objects and still be able to access properties
    directly if we know the id.

    {
        'tasks': [ 't1', 't2', ... ],
        'queues': [ 'q1', 'q2', .... ],
        'taskmap': {
            'id1': {},
            'id2': {}
        },
        'queuemap': {
            'id1': {},
            'id2': {}
        },
        'tags': [ 'tag1', 'tag2', ... ]
    }
    '''
    # Get the user's orgs
    orgs = list(org_model.get_for_user(g.user))
    user_tags = set(tags_model.get_for_user(g.user))

    state = {
        'orgs': orgs,
        'user' : user_model.get(g.user),
        'user_tags': list(user_tags),
    }

    if org_id:
        # Get set of assigned tasks
        org_tasks = list(task_model.get_for_org(org_id))

        # Iterate over assigned tasks and build tasks object
        taskmap = {}
        for task in org_tasks:
            retrieved_task = task_model.get(task)
            if retrieved_task:
                tags = ','.join(sorted(retrieved_task['tags'].split(',')))
                retrieved_task['tags'] = tags
                taskmap[retrieved_task['id']] = retrieved_task
            else:
                task_model.remove_from_org(org_id, task)

        queues = queue_model.get_for_org(org_id)
        org_tags = set(tags_model.get_for_org(org_id))
        filtermap = {filter_id: filter_model.get(filter_id) for filter_id in filter_model.get_for_org(org_id)}

        state['user']['role'] = permission_model.get_role(g.user, org_id)
        state['user']['permissions'] = permission_model.all_tags(g.user, org_id)
        state['user']['lte_roles'] = permission_model.all_lte_roles(g.user, org_id)

        org_users = list(org_model.get_users(org_id))
        users = []
        for user_id in org_users:
            user_data = user_model.get(user_id, include=['name', 'id'])
            other_role = permission_model.get_role(user_id, org_id)
            user_data.update({
                'role': other_role
            })
            users.append(user_data)

        tags = list(org_tags.union(user_tags))

        state.update({
            'tasks': org_tasks,
            'queues': queues,
            'tags': tags,
            'taskmap': taskmap,
            'users': users,
            'preferences': style_rules.get(org_id),
            'filtermap': filtermap,
            'org': org_model.get(org_id)
        })

    return state