# coding:utf-8 import imp from operator import or_ from ..base import base from ..models import Role, Resource, User from flask import render_template, request from flask_login import current_user from flask import jsonify from datetime import datetime from .. import db import uuid from sqlalchemy import desc from sqlalchemy import asc from sqlalchemy import or_ @base.route('/securityJsp/base/Syrole.jsp', methods=['GET']) def index_role(): return render_template('role/index.html') @base.route('/securityJsp/base/SyroleForm.jsp', methods=['GET']) def form_role(): return render_template('role/form.html', id=request.args.get('id', '')) @base.route('/securityJsp/base/SyroleGrant.jsp', methods=['GET']) def grant_role_page(): return render_template('role/grant.html', id=request.args.get('id', '')) @base.route('/base/syrole!doNotNeedSecurity_getRolesTree.action', methods=['POST']) def get_roles_tree(): roles = Role.query.join(User, Role.users).filter(User.ID == current_user.ID).all() return jsonify([role.to_json() for role in roles]) @base.route('/base/syrole!doNotNeedSecurity_getRoleByUserId.action', methods=['POST']) def get_roles_by_userId(): roles = Role.query.join(User, Role.users).filter(User.ID == request.form.get('id')).all() return jsonify([role.to_json() for role in roles]) @base.route('/base/syrole!grant.action', methods=['POST']) def grant_role(): id = request.form.get('id') ids = request.form.get('ids') role = Role.query.get(id) if not ids: #授权资源为空 role.resources = [] else: #授权资源访问,资源之间以逗号分割 idList = ids.split(',') role.resources = [Resource.query.get(rid) for rid in idList] db.session.add(role) return jsonify({'success': True}) @base.route('/system/role/list', methods=['GET']) def grid(): filters = [] if request.form.get('name'): filters.append(Role.NAME.like('%' + request.form.get('name') + '%')) order_by = [] if request.form.get('sort'): if request.form.get('order') == 'asc': order_by.append(asc(getattr(Role,request.form.get('sort').upper()))) elif request.form.get('order') == 'desc': order_by.append(desc(getattr(Role,request.form.get('sort').upper()))) else: order_by.append(getattr(Role,request.form.get('sort').upper())) page = request.form.get('page', 1, type=int) rows = request.form.get('rows', 10, type=int) pagination = current_user.roles.filter(*filters).order_by(*order_by).paginate( page, per_page=rows, error_out=False) roles = pagination.items return jsonify({'rows': [role.to_json() for role in roles], 'total': pagination.total}) @base.route('/system/role/', methods=['GET']) def syrole_getById(id): role = Role.query.get(id) if role: return jsonify({'code': 200, 'msg': '操作成功', 'data': role.to_json()}) else: return jsonify({'success': False, 'msg': 'error'}) @base.route('/system/role', methods=['PUT']) def syrole_update(): role = Role.query.get(request.json['roleId']) role.UPDATEDATETIME = datetime.now() role.NAME = request.json['roleName'] role.DESCRIPTION = request.json['remark'] role.SEQ = request.json['roleSort'] db.session.add(role) return jsonify({'code': 200}) @base.route('/system/role', methods=['POST']) def syrole_save(): role = Role() role.ID = str(uuid.uuid4()) role.NAME = request.json['roleName'] if 'remark' in request.json: role.DESCRIPTION = request.json['remark'] role.SEQ = request.json['roleSort'] if 'menuIds' in request.json: res_list = [Resource.query.get(menuId) for menuId in request.json['menuIds']] role.resources = res_list # add current use to new role current_user.roles.append(role) db.session.add(role) return jsonify({'code': 200}) @base.route('/system/role/', methods=['DELETE']) def syrole_delete(id): role = Role.query.get(id) if role: db.session.delete(role) return jsonify({'code': 200}) @base.route('/system/role/authUser/allocatedList', methods=['GET']) def allocatedList(): page = request.args.get('pageNum', 1, type=int) rows = request.args.get('pageSize', 10, type=int) pagination = User.query.join(Role, User.roles).filter(Role.ID == request.args['roleId']).paginate( page, per_page=rows, error_out=False) users = pagination.items return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total}) @base.route('/system/role/authUser/unallocatedList', methods=['GET']) def unallocatedList(): page = request.args.get('pageNum', 1, type=int) rows = request.args.get('pageNum', 10, type=int) pagination = User.query.join(Role, User.roles).filter(or_(Role.ID != request.args['roleId'], Role.ID == None)).paginate( page, per_page=rows, error_out=False) users = pagination.items return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})