苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V1.9) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 889|回复: 3

[教程] 【通用权限管理系统】角色管理>分配菜单保存逻辑处理

[复制链接]
发表于 2018-1-9 17:31:20 | 显示全部楼层 |阅读模式
【通用权限管理系统】角色管理>分配菜单保存逻辑处理


导读部分





教程部分


本帖子主要讲解权限管理>角色管理>分配菜单>保存/取消按钮的逻辑实现方法
如下图所示:
3.png

保存按钮html
[C#] 纯文本查看 复制代码
<button class="btn btn-primary" id="btnSave">保存</button>

取消按钮html
[C#] 纯文本查看 复制代码
<button class="btn btn-cancel" id="btnCancle">取消</button>

点击取消按钮,js实现如下:
[C#] 纯文本查看 复制代码
$("#btnCancle").click(function () {
            window.location.href = '/Sys/ReloList.aspx';
        });

点击保存按钮,js实现如下:
[C#] 纯文本查看 复制代码
var md = sRequire('modal'),
        layout = sRequire('layout');
        $("#btnSave").click(function () {
            var $this = $(this);
            var ckv = [];
            var ckedv = [];
            $('input[name="like"]:checked').each(function () {
                ckv.push(this.value);
            });
            $('input[name="menuChild"]:checked').each(function () {
                ckedv.push(this.value);
            });
            var index = layer.load(2);
            $.post('/sys/RoleMenu.aspx?action=assign', { roleId: '<%=roleId %>', ck: ckv.join(","), cked: ckedv.join(",") }, function (data) {
                layer.close(index);
                if (data.reCode > 0) {
                    window.location.href = '/Sys/ReloList.aspx';
                }
                else {
                    $error.html(data.msg);
                    md.bind({
                        target: '#md2'
                    });
                }
            }, 'json');
        });

此处可以看到,在点击保存后,会先获取子菜单的id集合,以及主菜单的id集合,然后将id集合作为参数,传到后台进行保存处理

保存按钮的cs逻辑代码处理如下:
[C#] 纯文本查看 复制代码
else if ( "assign" == action ) {
                //保存此角色的菜单信息
                /*
                 * 1. 权限处理,如果没有权限,直接返回
                 * 2. 获取数据
                 * 3. 保存数据
                 */
                // 获取数据,角色id合法性校验
                var ck = InputHelper.GetInputString( Request[ "ck" ] );
                var cked = InputHelper.GetInputString( Request[ "cked" ] );
                if ( roleId <= 0 ) {
                    Response.Write( "{\"reCode\":0,\"msg\":\"角色id不合法\"}" );
                    Response.End();
                    return;
                }

                // 删除以前的角色菜单信息
                sys_menuInRoleBll.Delete( string.Format( "RoleID = {0}", roleId ) );

                //批量给一级菜单
                if ( !string.IsNullOrWhiteSpace( ck ) ) {
                    //循环添加角色菜单
                    foreach ( var id in ck.Split( ',' ) ) {
                        //菜单id合法性校验
                        int muneId = InputHelper.GetInputInt( id );
                        if ( muneId > 0 ) {
                            //新增菜单给此角色
                            Sys_MenuInRoleInfo addInfo = new Sys_MenuInRoleInfo {
                                RoleID = roleId,
                                MenuID = muneId,
                                levelFlag = 1
                            };
                            sys_menuInRoleBll.Insert( addInfo );
                        }
                    }
                }

                //遍历已有菜单列表
                foreach ( var id in cked.Split( ',' ) ) {
                    int muneId = InputHelper.GetInputInt( id );
                    if ( muneId > 0 ) {
                        Sys_MenuInRoleInfo addInfo = new Sys_MenuInRoleInfo {
                            RoleID = roleId,
                            MenuID = muneId
                        };
                        sys_menuInRoleBll.Insert( addInfo );
                    }
                }
                Response.Write( "{\"reCode\":1,\"msg\":\"ok\"}" );
                Response.End();
            }
        }

在此处的逻辑如下:
* 1. 权限处理,如果没有权限,直接返回
* 2. 获取数据
* 3. 保存数据

注: 在保存数据时,这里的处理操作如下:

1. 先删除原有的角色菜单信息
[C#] 纯文本查看 复制代码
// 删除以前的角色菜单信息
                sys_menuInRoleBll.Delete( string.Format( "RoleID = {0}", roleId ) );


2. 遍历获取的菜单id集合,然后循环进行添加
a:批量添加一级菜单
[C#] 纯文本查看 复制代码
//批量给一级菜单
                if ( !string.IsNullOrWhiteSpace( ck ) ) {
                    //循环添加角色菜单
                    foreach ( var id in ck.Split( ',' ) ) {
                        //菜单id合法性校验
                        int muneId = InputHelper.GetInputInt( id );
                        if ( muneId > 0 ) {
                            //新增菜单给此角色
                            Sys_MenuInRoleInfo addInfo = new Sys_MenuInRoleInfo {
                                RoleID = roleId,
                                MenuID = muneId,
                                levelFlag = 1
                            };
                            sys_menuInRoleBll.Insert( addInfo );
                        }
                    }
                }

b: 遍历添加子菜单信息
[C#] 纯文本查看 复制代码
foreach ( var id in cked.Split( ',' ) ) {
                    int muneId = InputHelper.GetInputInt( id );
                    if ( muneId > 0 ) {
                        Sys_MenuInRoleInfo addInfo = new Sys_MenuInRoleInfo {
                            RoleID = roleId,
                            MenuID = muneId
                        };
                        sys_menuInRoleBll.Insert( addInfo );
                    }
                }

 楼主| 发表于 2018-1-9 21:09:17 | 显示全部楼层
此处是权限管理中的一个重点,就是不同的角色,进入系统后,有不同的菜单显示,此处就是处理这个的,是权限管理中的一个重点
发表于 2018-1-9 21:21:15 | 显示全部楼层
 楼主| 发表于 2018-1-10 19:35:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1 )

GMT+8, 2019-1-19 01:44

© 2017-2018

快速回复 返回顶部 返回列表