Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
from functools import wraps

from flask_login import current_user
from werkzeug.exceptions import Forbidden

from .ability_enum import AbilityEnum


def create_permission_decorators(Role, Ability):
    def user_is(role):
        def wrapper(func):
            @wraps(func)
            def inner(*args, **kwargs):
                if current_user.is_role(role):
                    return func(*args, **kwargs)
                else:
                    raise Forbidden("User is not allowed")

            return inner

        return wrapper

    def user_has(ability_str):
        ability = AbilityEnum[ability_str]

        def wrapper(func):
            @wraps(func)
            def inner(*args, **kwargs):
                if current_user.has_ability(ability):
                    return func(*args, **kwargs)
                else:
                    raise Forbidden(
                        f"User doesn't have the required ability: {ability.value}"
                    )

            return inner

        return wrapper

    return (user_is, user_has)