62 lines
2.1 KiB
Python
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
|
|
|
|
|