Search code examples
pythonpermissionsauthorizationdecoratorcherrypy

Writing a CherryPy Decorator for Authorization


I have a cherrypy application and on some of the views I want to start only allowing certain users to view them, and sending anyone else to an authorization required page.

Is there a way I can do this with a custom decorator? I think that would be the most elegant option.

Here's a basic example of what I want to do:

class MyApp:
    @authorization_required
    def view_page1(self,appID):
        ... do some stuff ...
        return html

def authorization_required(func):
    #what do I put here?

Also can the authorization_required function when called as a decorator accept parameters like allow_group1, allow_group2? Or do I need a separate decorator for each group?


Solution

  • Ok, in that case your decorator would look something like this:

    # without any parameters
    def authentication_required(f):
        @functools.wraps(f)
        def _authentication_required(*args, **kwargs):
            # Do you login stuff here
            return f(*args, **kwargs)
        return _authentication_required
    
    # With parameters
    def authentication_required(*allowed_groups):
        def _authentication_required(f):
            @functools.wraps(f)
            def __authentication_required(*args, **kwargs):
                # Do you login stuff here
                return f(*args, **kwargs)
            return __authentication_required
        return _authentication_required