summer/summer/views/role.py

62 lines
2.1 KiB
Python

from summer.models import session_scope
__author__ = 'tanshu'
from summer.models.auth import Role, Permission
def save_role(json):
role = Role(json['Name'].strip())
with session_scope() as DBSession:
DBSession.add(role)
add_permissions(role, json['Permissions'], DBSession)
return role_info(role.id)
def update_role(json):
with session_scope() as DBSession:
role = Role.by_id(json['RoleID'], session=DBSession)
role.name = json['Name'].strip()
add_permissions(role, json['Permissions'], session=DBSession)
return role_info(role.id)
def add_permissions(role, permissions, *, session=None):
for permission in permissions:
id = permission['PermissionID']
gp = [p for p in role.permissions if p.id == id]
gp = None if len(gp) == 0 else gp[0]
if permission['Enabled'] and gp is None:
role.permissions.append(Permission.by_id(id, session=session))
elif not permission['Enabled'] and gp:
role.permissions.remove(gp)
def show_list():
with session_scope() as DBSession:
list = Role.list(session=DBSession)
roles = []
for item in list:
role = {'RoleID': item.id, 'Name': item.name, 'Permissions': []}
for permission in item.permissions:
role['Permissions'].append(permission.name)
roles.append(role)
return roles
def role_info(id):
with session_scope() as DBSession:
if id is None:
role = {'Name': '', 'Permissions': []}
for item in Permission.list(session=DBSession):
role['Permissions'].append({'PermissionID': item.id, 'Name': item.name, 'Enabled': False})
else:
role_object = Role.by_id(id, session=DBSession)
role = {'RoleID': role_object.id, 'Name': role_object.name, 'Permissions': []}
for item in Permission.list(session=DBSession):
enabled = True if item in role_object.permissions else False
role['Permissions'].append({'PermissionID': item.id, 'Name': item.name, 'Enabled': enabled})
return role