¡@

Home 

OpenStack Study: decorators.py

OpenStack Index

**** CubicPower OpenStack Study ****

def _current_component(view_func, dashboard=None, panel=None):

    """Sets the currently-active dashboard and/or panel on the request."""

    @functools.wraps(view_func, assigned=available_attrs(view_func))

    def dec(request, *args, **kwargs):

        if dashboard:

            request.horizon['dashboard'] = dashboard

        if panel:

            request.horizon['panel'] = panel

        return view_func(request, *args, **kwargs)

    return dec

**** CubicPower OpenStack Study ****

def require_auth(view_func):

    """Performs user authentication check.

    Similar to Django's `login_required` decorator, except that this throws

    :exc:`~horizon.exceptions.NotAuthenticated` exception if the user is not

    signed-in.

    """

    from horizon.exceptions import NotAuthenticated  # noqa

    @functools.wraps(view_func, assigned=available_attrs(view_func))

    def dec(request, *args, **kwargs):

        if request.user.is_authenticated():

            return view_func(request, *args, **kwargs)

        raise NotAuthenticated(_("Please log in to continue."))

    return dec

**** CubicPower OpenStack Study ****

def require_perms(view_func, required):

    """Enforces permission-based access controls.

    :param list required: A tuple of permission names, all of which the request

                          user must possess in order access the decorated view.

    Example usage::

        from horizon.decorators import require_perms

        @require_perms(['foo.admin', 'foo.member'])

        def my_view(request):

            ...

    Raises a :exc:`~horizon.exceptions.NotAuthorized` exception if the

    requirements are not met.

    """

    from horizon.exceptions import NotAuthorized  # noqa

    # We only need to check each permission once for a view, so we'll use a set

    current_perms = getattr(view_func, '_required_perms', set([]))

    view_func._required_perms = current_perms | set(required)

    @functools.wraps(view_func, assigned=available_attrs(view_func))

    def dec(request, *args, **kwargs):

        if request.user.is_authenticated():

            if request.user.has_perms(view_func._required_perms):

                return view_func(request, *args, **kwargs)

        raise NotAuthorized(_("You are not authorized to access %s")

                            % request.path)

    # If we don't have any permissions, just return the original view.

    if required:

        return dec

    else:

        return view_func