from flask import Flask, Response, g, current_app
from flask_restx import Api, fields, Resource
from flask_rbac import RBAC, UserMixin, RoleMixin
from functools import wraps

app = Flask(__name__)
app.config['RBAC_USE_WHITE'] = True

rbac = RBAC(app)
api = Api(app,
          version='1.0',
          title='Rbac',
          description='RBAC POC',
          security=rbac.allow(roles=['Q', 'P'], methods=['PUT']))

ns = api.namespace('rbac', description="role based access control")
data = api.model('rbac_info', {'user_id': fields.String('user_id')})


class Role(RoleMixin):
    def __init__(self, name, user_permission):
        self.user_permission = user_permission
        super(Role, self).__init__(name)

    def __repr__(self):
        return 'Role: {} Permission: {}'.format(self.name,
                                                self.user_permission)

    def get_permission(self):
        return self.user_permission