Access Control

This service provides a access control.

Paths

Check this example to how use auth.required.

is_authenticated

from flask import Blueprint
from flask_restplus import Api, Resource
from flask_auth_service_mongo import auth

view_admin = Blueprint('view_admin', __name__)
api = Api(view_admin)


@api.route('/blog')
class ApiLogout(Resource):
    @auth.required()
    def post(self):
        return {
            'message': 'Ok'
        }
POST /admin/blog

Example request:

POST /admin/blog HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer token_123_xD

{}

specific_role

from flask import Blueprint
from flask_restplus import Api, Resource
from flask_auth_service_mongo import auth

view_admin = Blueprint('view_admin', __name__)
api = Api(view_admin)


@api.route('/blog')
class ApiLogout(Resource):
    @auth.required('custom_role')
    def post(self):
        return {
            'message': 'Ok'
        }

list_roles

from flask import Blueprint
from flask_restplus import Api, Resource
from flask_auth_service_mongo import auth

view_admin = Blueprint('view_admin', __name__)
api = Api(view_admin)


@api.route('/blog')
class ApiLogout(Resource):
    @auth.required(['custom_role', 'other_role'])
    def post(self):
        return {
            'message': 'Ok'
        }

Middleware Mutations Graphene

Check this example to how use MutationMiddleware.

import graphene
from flask import Blueprint
from flask_auth_service_mongos import MutationMiddleware

view_admin = Blueprint('view_admin', __name__)

my_schema = graphene.Schema()

my_access_control = [
    {'mutation': 'create_blog', 'roles': ['is_authenticated']},
    {'mutation': 'update_blog', 'roles': ['role_user', 'role_admin']},
    {'mutation': 'delete_blog', 'roles': ['role_admin']},
]

view_admin.add_url_rule(
    '/graphql',
    view_func=result_to_json(
        auth.required(role='admin')(
            GraphQLView.as_view(
                'graphql',
                schema=my_schema,
                graphiql=True,
                middleware=[
                    MutationMiddleware(my_access_control)
                ]
            )
        )
    ),
    methods=['GET', 'POST']
)