93 lines
3.6 KiB
Python
93 lines
3.6 KiB
Python
import uuid
|
|
|
|
import transaction
|
|
from pyramid.response import Response
|
|
from pyramid.view import view_config
|
|
|
|
from barker.models import Permission, Role
|
|
|
|
|
|
@view_config(request_method='POST', route_name='v1_roles_new', renderer='json', permission='Users', trans=True)
|
|
def save(request):
|
|
item = Role(request.json_body['name'])
|
|
request.dbsession.add(item)
|
|
add_permissions(item, request.json_body['permissions'], request.dbsession)
|
|
transaction.commit()
|
|
item = request.dbsession.query(Role).filter(Role.id == item.id).first()
|
|
permissions = request.dbsession.query(Permission).order_by(Permission.name).all()
|
|
return role_info(item, permissions)
|
|
|
|
|
|
@view_config(request_method='PUT', route_name='v1_roles_id', renderer='json', permission='Users', trans=True)
|
|
def update(request):
|
|
id_ = request.matchdict['id']
|
|
item = request.dbsession.query(Role).filter(Role.id == uuid.UUID(id_)).one()
|
|
item.name = request.json_body['name']
|
|
add_permissions(item, request.json_body['permissions'], request.dbsession)
|
|
transaction.commit()
|
|
item = request.dbsession.query(Role).filter(Role.id == item.id).first()
|
|
permissions = request.dbsession.query(Permission).order_by(Permission.name).all()
|
|
return role_info(item, permissions)
|
|
|
|
|
|
def add_permissions(role, permissions, dbsession):
|
|
for permission in permissions:
|
|
id_ = uuid.UUID(permission['id'])
|
|
rp = [p for p in role.permissions if p.id == id_]
|
|
rp = None if len(rp) == 0 else rp[0]
|
|
if permission['enabled'] and rp is None:
|
|
permission_object = dbsession.query(Permission).filter(Permission.id == id_).one()
|
|
role.permissions.append(permission_object)
|
|
elif not permission['enabled'] and rp:
|
|
role.permissions.remove(rp)
|
|
|
|
|
|
@view_config(request_method='DELETE', route_name='v1_roles_id', renderer='json', permission='Users', trans=True)
|
|
def delete(request):
|
|
id_ = request.matchdict['id']
|
|
if id_ is None:
|
|
response = Response("Role is Null")
|
|
response.status_int = 500
|
|
return response
|
|
else:
|
|
response = Response("Role deletion not implemented")
|
|
response.status_int = 500
|
|
return response
|
|
|
|
|
|
@view_config(request_method='GET', route_name='v1_roles_id', renderer='json', permission='Authenticated')
|
|
def show_id(request):
|
|
id_ = uuid.UUID(request.matchdict['id'])
|
|
item = request.dbsession.query(Role).filter(Role.id == id_).first()
|
|
permissions = request.dbsession.query(Permission).order_by(Permission.name).all()
|
|
return role_info(item, permissions)
|
|
|
|
|
|
@view_config(request_method='GET', route_name='v1_roles_new', renderer='json', permission='Authenticated')
|
|
def show_blank(request):
|
|
permissions = request.dbsession.query(Permission).order_by(Permission.name).all()
|
|
return role_info(None, permissions)
|
|
|
|
|
|
@view_config(request_method='GET', route_name='v1_roles_list', renderer='json', permission='Authenticated')
|
|
def show_list(request):
|
|
list_ = request.dbsession.query(Role).order_by(Role.name).all()
|
|
return [
|
|
{'id': item.id, 'name': item.name, 'permissions': sorted(p.name for p in item.permissions)} for item in list_
|
|
]
|
|
|
|
|
|
def role_info(item, permissions):
|
|
if item is not None:
|
|
return {
|
|
'id': item.id,
|
|
'name': item.name,
|
|
'permissions': [{'id': p.id, 'name': p.name, 'enabled': True if p in item.permissions else False}
|
|
for p in permissions]
|
|
}
|
|
else:
|
|
return {
|
|
'name': '',
|
|
'permissions': [{'id': p.id, 'name': p.name, 'enabled': False} for p in permissions]
|
|
}
|