示例#1
0
文件: views.py 项目: bliuredhat/PDC
def get_url_with_resource(request):
    api_root_dict = OrderedDict()
    viewsets = {}
    ret = OrderedDict()
    list_name = router.routes[0].name
    for prefix, viewset, basename in router.registry:
        api_root_dict[prefix] = list_name.format(basename=basename)
        viewsets[prefix] = viewset
    sorted_api_root_dict = OrderedDict(sorted(api_root_dict.items()))
    for key, url_name in sorted_api_root_dict.items():
        name = URL_ARG_RE.sub(r'{\1}', key)
        ret[name] = None
        urlargs = [_get_arg_value(arg[0]) for arg in URL_ARG_RE.findall(key)]
        for getter in [_get_list_url, _get_nested_list_url, _get_detail_url]:
            try:
                if getter == _get_list_url:
                    ret[name] = urldecode(
                        getter(url_name, viewsets[key], request))
                else:
                    ret[name] = urldecode(
                        getter(url_name, viewsets[key], request, urlargs))
                break
            except NoReverseMatch:
                continue
    return ret
示例#2
0
文件: views.py 项目: bliuredhat/PDC
def get_api_perms(request):
    """
    Return all API perms for @groups and users.
    Format: {resource: {create/read/update/delete: [users, @groups]}}
    """
    perms = {}
    ret = get_url_with_resource(request)

    for obj in models.ResourcePermission.objects.all():
        name = URL_ARG_RE.sub(r'{\1}', obj.resource.name)
        if name not in ret:
            continue
        url = ret[name]
        if read_permission_for_all() and obj.permission.name == 'read':
            members_list = ['@all']
        else:
            members_list = get_users_and_groups(obj)
        perms.setdefault(name,
                         OrderedDict()).setdefault(obj.permission.name,
                                                   members_list)
        perms.setdefault(name, OrderedDict()).setdefault('url', url)
    # sort groups and users
    for resource in perms:
        for perm in perms[resource]:
            if not isinstance(perms[resource][perm], set):
                # sort only lists with groups and users, skip 'url'
                continue
            perms[resource][perm] = sorted(perms[resource][perm])
    result = OrderedDict(sorted(perms.items()))
    return result
def get_api_perms(request):
    """
    Return all API perms for @groups and users.
    Format: {resource: {create/read/update/delete: [users, @groups]}}
    """
    perms = {}
    ret = get_url_with_resource(request)

    for obj in models.ResourcePermission.objects.all():
        name = URL_ARG_RE.sub(r'{\1}', obj.resource.name)
        if name not in ret:
            continue
        url = ret[name]
        if read_permission_for_all() and obj.permission.name == 'read':
            members_list = ['@all']
        else:
            members_list = get_users_and_groups(obj)
        perms.setdefault(name, OrderedDict()).setdefault(obj.permission.name, members_list)
        perms.setdefault(name, OrderedDict()).setdefault('url', url)
    # sort groups and users
    for resource in perms:
        for perm in perms[resource]:
            if not isinstance(perms[resource][perm], set):
                # sort only lists with groups and users, skip 'url'
                continue
            perms[resource][perm] = sorted(perms[resource][perm])
    result = OrderedDict(sorted(perms.items()))
    return result
def get_url_with_resource(request):
    api_root_dict = OrderedDict()
    viewsets = {}
    ret = OrderedDict()
    list_name = router.routes[0].name
    for prefix, viewset, basename in router.registry:
        api_root_dict[prefix] = list_name.format(basename=basename)
        viewsets[prefix] = viewset
    sorted_api_root_dict = OrderedDict(sorted(api_root_dict.items()))
    for key, url_name in sorted_api_root_dict.items():
        name = URL_ARG_RE.sub(r'{\1}', key)
        ret[name] = None
        urlargs = [_get_arg_value(arg[0]) for arg in URL_ARG_RE.findall(key)]
        for getter in [_get_list_url, _get_nested_list_url, _get_detail_url]:
            try:
                if getter == _get_list_url:
                    ret[name] = urldecode(getter(url_name, viewsets[key], request))
                else:
                    ret[name] = urldecode(getter(url_name, viewsets[key], request, urlargs))
                break
            except NoReverseMatch:
                continue
    return ret