Add list of possible permissions
parent
f63137cb39
commit
3c0644357b
|
@ -3,7 +3,20 @@ from flask_restful import abort
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
|
|
||||||
|
valid_permissions = [
|
||||||
|
'CREATE_DEVICE_TYPE',
|
||||||
|
'CREATE_ROLE',
|
||||||
|
'ASSIGN_ROLE',
|
||||||
|
'CREATE_DEVICE',
|
||||||
|
'CREATE_DASHBOARD',
|
||||||
|
'READ_DEVICE_TYPES',
|
||||||
|
'READ_ROLES']
|
||||||
|
|
||||||
|
|
||||||
def requires_permission(permission, action_name='Action'):
|
def requires_permission(permission, action_name='Action'):
|
||||||
|
if permission not in valid_permissions:
|
||||||
|
raise ValueError('Permission ' + str(permission) + ' does not exist!')
|
||||||
|
|
||||||
def requires_permission_decorator(func):
|
def requires_permission_decorator(func):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def permission_protected_function(*args, **kwargs):
|
def permission_protected_function(*args, **kwargs):
|
||||||
|
|
|
@ -5,7 +5,8 @@ from webargs.flaskparser import use_args
|
||||||
from flasgger import swag_from
|
from flasgger import swag_from
|
||||||
import app.accounts.api as accounts
|
import app.accounts.api as accounts
|
||||||
from app.api.auth_protection import ProtectedResource
|
from app.api.auth_protection import ProtectedResource
|
||||||
from app.api.permission_protection import requires_permission
|
from app.api.permission_protection import (requires_permission,
|
||||||
|
valid_permissions)
|
||||||
|
|
||||||
|
|
||||||
class UserSchema(Schema):
|
class UserSchema(Schema):
|
||||||
|
@ -18,11 +19,16 @@ class RoleUpdateSchema(Schema):
|
||||||
role_id = fields.Integer(required=True, load_only=True, location='json')
|
role_id = fields.Integer(required=True, load_only=True, location='json')
|
||||||
|
|
||||||
|
|
||||||
|
def validate_role_permissions(permissions_list):
|
||||||
|
return set(permissions_list).issubset(valid_permissions)
|
||||||
|
|
||||||
|
|
||||||
class RoleSchema(Schema):
|
class RoleSchema(Schema):
|
||||||
id = fields.Integer(required=True, location='json')
|
id = fields.Integer(required=True, location='json')
|
||||||
display_name = fields.String(required=True, location='json')
|
display_name = fields.String(required=True, location='json')
|
||||||
permissions = fields.List(fields.String, required=True,
|
permissions = fields.List(fields.String, required=True,
|
||||||
location='json', many=True)
|
location='json', many=True,
|
||||||
|
validate=validate_role_permissions)
|
||||||
|
|
||||||
|
|
||||||
class RoleWrapperSchema(Schema):
|
class RoleWrapperSchema(Schema):
|
||||||
|
|
Loading…
Reference in New Issue