Ejemplo n.º 1
0
def permission_sort_modify():
    """权限列表排序"""

    permission_id = toint(request.args.get('permission_id', '0'))
    new_sort = toint(request.args.get('new_sort', '0'))
    new_sort = new_sort if new_sort > 0 else -1

    if new_sort < 0:
        return u'只能输入大于0的数字'

    if new_sort > 10000000:
        return u'数字不能过大'

    if permission_id <= 0:
        return u'参数出错'

    p = Permission.get(permission_id)

    if p:
        p.update(sort_order=new_sort, commit=True)

    return u'ok'
Ejemplo n.º 2
0
def menu_save():
    """保存菜单"""
    g.title = u'保存菜单'
    g.page_type = ''

    errmsg = {}
    form = request.form
    permission_id = toint(form.get('permission_id', '0'))
    endpoint = form.get('endpoint', '').strip()
    endpoint_name = form.get('endpoint_name', '').strip()
    endpoint_icon = form.get('endpoint_icon', '').strip()
    menu_type = toint(form.get('menu_type', '0'))
    sort_order = toint(form.get('sort_order', '0'))
    new_endpoint_list = form.get('endpoint_list', '').strip()  #新端点列表

    # 必填项检查
    if menu_type == 0:
        required_param_list = [
            'endpoint', 'endpoint_name', 'endpoint_icon', 'menu_type',
            'sort_order'
        ]
    else:
        required_param_list = [
            'endpoint', 'endpoint_name', 'menu_type', 'sort_order',
            'endpoint_list'
        ]

    for param in required_param_list:
        val = form.get(param, '')
        val = val.strip()
        if not val:
            errmsg[param] = u'必填项'

    if errmsg:
        g.errmsg = errmsg
        log_debug('errmsg:%s' % g.errmsg)
        return render_template('sys/menu_add.html.j2', f=form)

    if permission_id <= 0:
        permission_info = Permission.create(endpoint_list=endpoint)
        # 判断新增端点是否已经存在
        if menu_type == 0:
            e_q = Permission.query.filter(
                Permission.endpoint == endpoint).filter(
                    Permission.parent_id == 0)
        else:
            e_q = Permission.query.filter(
                Permission.endpoint == endpoint).filter(
                    Permission.parent_id > 0)
        e = e_q.first()
        if e:
            errmsg['endpoint'] = u'新增端点:%s已经存在' % endpoint

        # 判断新增端点名称是否存在
        en = e_q.filter(Permission.endpoint_name == endpoint_name).first()
        if en:
            errmsg['endpoint_name'] = u'新增端点名称:%s已经存在' % endpoint_name

        if errmsg:
            g.errmsg = errmsg
            log_debug('errmsg:%s' % g.errmsg)
            return render_template('sys/menu_add.html.j2', f=form)
    else:
        permission_info = Permission.get(permission_id)

    if menu_type == 1:
        endpoint_list = db.session.query(
            Permission.endpoint).filter(Permission.parent_id == 0).all()
        endpoint_key_list = map(lambda e: e.endpoint.split('.')[0],
                                endpoint_list)
        new_endpoint = endpoint.split('.')
        new_endpoint_key = new_endpoint[0]
        if new_endpoint_key not in endpoint_key_list:
            errmsg['endpoint'] = u'子菜单端点%s与主菜单不符合' % endpoint

        if errmsg:
            g.errmsg = errmsg
            log_debug('errmsg:%s' % g.errmsg)
            return render_template('sys/menu_add.html.j2', f=form)

        # 允许访问的端点列表处理
        ne_list = new_endpoint_list.split(',')  # 分割逗号后允许访问的端点列表
        if endpoint not in ne_list:
            new_endpoint_list = endpoint + ',' + new_endpoint_list
        permission_info.update(endpoint_list=new_endpoint_list)

        for key in endpoint_key_list:
            if key != new_endpoint_key:
                continue

            p = Permission.query.filter(
                Permission.endpoint.like(u'%' + new_endpoint_key)).first()
            if not p:
                p = Permission.query.filter(
                    Permission.endpoint.like(u'%' + new_endpoint_key +
                                             u'%')).first()

            if not p:
                errmsg['endpoint'] = u'找不到对应的主菜单'

            if errmsg:
                g.errmsg = errmsg
                log_debug('errmsg:%s' % g.errmsg)
                return render_template('sys/menu_add.html.j2', f=form)

            parent_id = p.permission_id

    parent_id = parent_id if menu_type == 1 else 0
    permission_info.update(parent_id=parent_id,
                           endpoint=endpoint,
                           endpoint_name=endpoint_name,
                           endpoint_icon=endpoint_icon,
                           sort_order=sort_order,
                           commit=True)

    return redirect(url_for('sys.menu_list'))