diff --git a/app/models/base.py b/app/models/base.py index c4470e2a51777600a1fd8b3593d8f47910fb40fd..bb0f150b22a70973e0557c3a60a3c210d1536613 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -64,6 +64,10 @@ class User: user_modified = db.Column(db.String(64)) +class UserGroup: + user_group = db.Column(db.String(36)) + + class Tracked(object): """A mixin to include tracking datetime fields.""" created = db.Column(columns.Arrow, default=func.now()) diff --git a/app/permissions/authorization.py b/app/permissions/authorization.py index fcb5a1c706731ad4d587a2912edc202a141c0e43..cc939082c2d429a72600d304f86e033ab4d62a55 100644 --- a/app/permissions/authorization.py +++ b/app/permissions/authorization.py @@ -4,7 +4,7 @@ from flask import current_app, g, request from werkzeug.exceptions import Unauthorized from ..lib.service import services -CRUD_TO_REST = { +REST_TO_CRUD = { 'POST': 'create', 'GET': 'read', 'PUT': 'update', # TODO: if no id 'create' @@ -19,26 +19,27 @@ def secured(f): if g.sub is not None: current_app.logger.info('{} accessing {}'.format(g.sub, request.endpoint)) - action = CRUD_TO_REST[request.method] + action = REST_TO_CRUD[request.method] resource = request.endpoint.split(':').pop(0) if resource.endswith('View'): resource = resource[:-4] from flask import session auth0_header = current_app.config.get('AUTH0_AUTH_HEADER') - headers = {} - headers[auth0_header] = request.headers.get(auth0_header) - params = {'permissions': 'true'} + headers = {auth0_header: request.headers.get(auth0_header)} + params = {'expand': ''} - response = services.user.get('/user/{}'.format(g.sub), params=params, headers=headers) + response = services.user.get('/user/{}'.format(g.sub), headers=headers, params=params) if not response.status_code == 200: raise Unauthorized data = response.json() - permissions = data['data'][g.sub]['permissions'] + g.user_permissions = data['data'][g.sub]['permissions'] + g.user_groups = data['data'][g.sub]['groups'] + action_resource = '{action}::{resource}'.format(action=action, resource=resource) - if action_resource not in permissions: + if action_resource not in g.user_permissions: raise Unauthorized else: diff --git a/requirements.txt b/requirements.txt index c3990ad8506d57cf09f46e1d7c4bebf57f1d1862..0d5349af13620dba2c59fde2f310a453bbedfdf7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ bcrypt==2.0.0 cffi==1.5.2 blessed==1.9.5 botocore==1.5.48 -git+ssh://git@github.com/Blocp/bpvalve.git@v1.2.0 +git+ssh://git@github.com/Blocp/bpvalve.git@v1.3.0 cement==2.4.0 colorama==0.3.3 docker-py==1.1.0