重邮项目(权限管理)

权限管理需要三个视图页面,一个新增角色页面,一个修改角色页面,还有一个页面用来存放控制器从数据库中查询出来的数据制成的图表。

以下代码为,基础代码以及表格。

    <!--页面布局-->
    <div class="container-fluid">
        <!--操作按钮-->
        <div class="row">
            <div class="col-10">
                <p style="color: #b70c0c;">
                    说明:此处管理的是角色的权限,你可以在这个界面让某种角色作废或启用,
                    也可以单击“修改”按钮修改角色的基本信息和权限,在作废后的角色可以删除,当然,你可以单击“新增角色”按钮新增一种角色和其相对应的权限。
                </p>
            </div>
            <div class="col-2">
                <button type="button" class="layui-btn" id="insert" onclick="insertUserType()">新增角色</button>
            </div>
        </div>
        <!--表格-->
        <div class="row">
            <div class="col">
                <table id="tabUserType" lay-filter="tabUserType"></table>
            </div>
        </div>
    </div>
<script>
        var tabUserType;//表格
        var layerIndex = 0;//弹出层
        var layer, layuiTable;//保存layui模块以便全局使用
        //1.0 页面数据绑定
        layui.use(['table', 'layer'], function () {
            layer = layui.layer, layuiTable = layui.table; //加载模块
            //1.1用户类型表格渲染
            tabUserType = layuiTable.render({
                elem: "#tabUserType",//html table id
                url: "SelectUserType",//数据接口
                cols: [[ //表头
                    { type: 'numbers', title: '序号' },//序号列,title设定标题名称
                    { field: 'UserTypeID', title: 'UserTypeID', hide: true },//hide:true 隐藏列
                    { field: 'UserType', title: '角色' },
                    { field: 'Describe', title: '描述' },
                    { title: '身份', templet: setTypeClass },//自定义身份函数setTypeClass
                    { field: 'FoundTime', title: '创建时间', sort: true },// sort: true 从而对列开启排序功能
                    { title: '操作', templet: setOperate, width: 260, align: 'center', fixed: 'right' }//width: 160 指定宽度,align 指定对其方式
                ]],
                page: {
                    limit: 10,//指定每页显示的条数
                    limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项
                }, //开启分页
            });
        });
        //1.2 自定义列 用户的身份 在UserType类型表中的typeClass中记录
        function setTypeClass(data) {
            //console.log(data.typeClass)
            var typeClass = data.typeClass;
            var strR = "";
            if (typeClass == 1) {
                strR = "学生";
            } else if (typeClass == 2) {
                strR = "教师";
            } else if (typeClass == 3) {
                strR = "管理";
            }
            return strR;
        }
        //1.3 自定义操作按钮
        function setOperate(data) {
            console.log(data.ToVoidNo)
            //data.ToVoidNo == true  说明当前用户类型 是启动的状态
            //data.ToVoidNo == false  说明当前用户类型 是作废的状态
            var toVoidNo = data.ToVoidNo;//是否作废
            var UserTypeID = data.UserTypeID;//用户类型ID
            var btns = "";
            if (toVoidNo) { //toVoidNo==true 启用状态
                btns += '<button type="button" class="layui-btn layui-btn-warm layui-btn-xs" onclick=modifyState(' + UserTypeID + ',false)>作废</button>';
            } else { //作废状态
                btns += '<button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick=modifyState(' + UserTypeID + ',true)>启用</button>';
            }
            btns += '<button type="button" class="layui-btn layui-btn-xs update" onclick=updateUserType(' + UserTypeID + ')>修改</button>';
            btns += '<button type="button" class="layui-btn layui-btn-xs layui-btn-danger delete" onclick=deleteUserType(' + UserTypeID + ')>删除</button>';
            return btns;
        }
        //1.4 修改用户类型的状态 作废/启用
        function modifyState(UserTypeID, ToViodNo) {
            layer.confirm('确定需要修改状态吗?', { icon: 3, offset: '50px' }, function (index) {
                $.post("ModifyUserTypeState", { UserTypeID: UserTypeID, toVoidNo: ToViodNo }, function (message) {
                    if (message.State) {
                        tabUserType.reload();
                    }
                    layer.msg(message.Text, { icon: 0, skin: "layui-layer-molv" });
                });
            });
        }
        //1.5 Update 修改用户类型
        function updateUserType(UserTypeID) {
            //多窗口模式,层叠置顶
            //多窗口模式,层叠置顶
            layerIndex = layer.open({
                type: 2,
                area: ['1000px', '600px'],
                title: "修改角色",
                maxmin: true,
                offset: '10px',
                content: "JurisdictionUpdate?UserTypeID=" + UserTypeID
            });
        }
        //1.8 跳转到新增界面
        function insertUserType() {
            //多窗口模式,层叠置顶
            layerIndex = layer.open({
                type: 2,// type=1:页面层,2:iframe层,4:tips层
                area: ['1000px', '600px'],//在默认状态下,layer是宽高都自适应的,这里定义宽度高。
                title: "新增角色",  //标题
                maxmin: true,//最大最小化,该参数值对type:1和type:2有效。默认不显示最大小化按钮。需要显示配置maxmin: true即可
                offset: '10px',
                content: "JurisdictionInsert"
            });
        };
        //1.5 delete 删除用户类型
        function deleteUserType(UserTypeID) {
            layer.confirm("确定删除该角色?", {
                icon: 3,
                btn: ['确定', '取消'],
                offset: '100px'
            }, function (index) {
                layer.close(index);
                $.getJSON("DeleteUserType?UserTypeID=" + UserTypeID, function (msg) {
                    if (msg.State) {
                        tabUserType.reload();
                    }  //提示
                    layer.msg(msg.Text, { icon: 0, skin: "layui-layer-molv", offset: '50px' });
                });
            });
        }
 </script>

新增角色需要一个较为特殊的模态框,这个模态框会包含所有权限的新增修改删除,同时还可以最大化,最小化,类似于一个提示框。主要使用了layui插件进行修饰。

   <div class="container-fluid">
        <div class="row p-3 ">
            <div class="col-sm-12">     
                                        @*action提交的地址        method提交的方式*@
                <form id="formUserType" action="InsertUserType" method="post" onsubmit="return false;">
                    <input type="reset" hidden />
                    <input type="text" id="ModularDetailIds" name="modularDetailIds" hidden />
                    <div class="form-row">
                        <label class="col-sm-1 col-form-label text-center" for="UserType">名称</label>
                        <div class="col-sm-2 px-0">
                            <input type="text" id="UserType" name="UserType" value="" class="form-control" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center" for="Describe">描述</label>
                        <div class="col-sm-2 px-0">
                            <input type="text" id="Describe" name="Describe" value="" class="form-control" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center" for="typeClass">身份</label>
                        <div class="col-sm-2">
                            <select class="form-control" id="typeClass" name="typeClass">
                                <option value="1">学生</option>
                                <option value="2">教师</option>
                                <option value="3">管理</option>
                            </select>
                        </div>
                        <button type="button" class="layui-btn" onclick="submitForm()">保存</button>
                        <button type="reset" class="layui-btn" onclick="resetUserType()">重置</button>
                    </div>
                </form>
            </div>
        </div>
        <div class="row px-3">
            <div class="col-sm-12" id="tableModular">
                <table id="tabModular" lay-filter="tabModular"></table>
            </div>
        </div>
    </div>
   <script>
        var ModularDetailIds = new Array();//记录用户勾选的模块明细id
        var tabModular;//表格
        var layerIndex = 0;
        var layer, layuiTable;//保存layui模块以便全局使用
        //1.0 加载和初始化layui模块
        layui.use(['layer', 'table'], function () {
            layer = layui.layer; layuiTable = layui.table;
            //1.1 表格渲染
            tabModular = layuiTable.render({
                elem: '#tabModular',//html table id
                url: 'SelectModularAndDetail',//数据接口
                cols: [[ //表头
                    { type: 'numbers', title: '序号' },//序号列,title设定标题名称
                    { field: 'ModularName', title: '模块名称', align: 'center' },
                    { title: '操作', templet: setOperate, align: 'center' }//width: 160 指定宽度,align 指定对其方式
                ]]
            });
        });
        // 1.2 自定义列方法
        function setOperate(data) {
            var btns = "";
            //获取模块明细
            var modularDetailVos = data.ModularDetailVos;
            for (var i = 0; i < modularDetailVos.length; i++) {
                btns += `<button type="button"
                             class="layui-btn layui-btn-xs layui-btn-primary"
                             id="btnOperates${modularDetailVos[i].ModularDetailID}" onclick="changeSelect(${modularDetailVos[i].ModularDetailID})">
                             ${modularDetailVos[i].OpType}</button>`
            }
            //var str = `<button type="button" class="layui-btn layui-btn-xs layui-btn-primary" id="btnOperates" onclick="changeSelect()">修改</button>`
            return btns;

        }
        //1.3 点击选择的对象
        function changeSelect(id) {
            $("#btnOperates" + id).toggleClass("layui-btn-primary")
        }
        //1.4重置按钮
        function resetUserType() {
            tabModular.reload();//重新加载
        }
        function submitForm() {
            var idstr = "";
            var ids = $("#tableModular div[lay-id='tabModular'] button");
            for (var i = 0; i < ids.length; i++) {
                if (!$(ids[i]).hasClass("layui-btn-primary")) {
                    var id = $(ids[i]).attr("id")
                    var n = id.substring(11, id.length) + ',';
                    idstr += n;
                }
            }
            $("#ModularDetailIds").val(idstr.substring(0, idstr.length - 1));
            var userType = $("#UserType").val();
            var describe = $("#Describe").val();
            //调用插件提交jquery.form.min.js提交表单
            // 12,234,45,67,8,9
            if (userType != null && describe != null && userType != "" && describe != "") {
                $("#formUserType").ajaxSubmit(function (message) {
                    //提示
                    layer.msg(message.Text, { icon: 0, skin: "layui-layer-molv" });
                    if (message.State) {
                        //设置计时器
                        setTimeout(closeThis(), 1000);
                    }
                });
            } else {
                layer.msg("请填写完整", { icon: 0, skin: "layui-layer-molv" });
            }
        }
        //1.6关闭 窗体是在父元素上面调用的 所以关闭窗口也需要在父元素中关闭
        function closeThis() {
            //调用父窗体的关闭。
            parent.layer.closeAll();
        }
    </script>

而修改的代码和新增的代码HTML代码类似,但是修改需要数据回填,回填数据时需要更改按钮的样式。并且下拉框的数据也需要回填。而下拉框的数据回填相对比较简单,可以使用@ViewBag.userType.UserType进行数据回填,这样就简化了很多代码,@在视图中的作用是将控制器的代码转接到视图中,也可以理解为在视图中运行控制器的代码。

    <div class="container-fluid">
        <div class="row p-3 ">
            <div class="col-sm-12">
                <form id="formUserType" action="UpdateUserType" method="post" onsubmit="return false;">
                    <input type="reset" hidden />
                    <input type="text" id="UserTypeID" name="UserTypeID" hidden value="@ViewBag.userType.UserTypeID" />
                    <input type="hidden" id="insertModularDetailIds" name="insertModularDetailIds" />
                    <input type="hidden" id="deleteModularDetailIds" name="deleteModularDetailIds" />
                    <div class="form-row">
                        <label class="col-sm-1 col-form-label text-center" for="UserType">名称</label>
                        <div class="col-sm-2 px-0">
                            <input type="text" id="UserType" name="UserType" value="@ViewBag.userType.UserType" class="form-control" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center" for="Describe">描述</label>
                        <div class="col-sm-2 px-0">
                            <input type="text" id="Describe" name="Describe" value="@ViewBag.userType.Describe" class="form-control" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center" for="typeClass">身份</label>
                        <div class="col-sm-2">
                            @*@ViewBag.userType.typeClass*@
                            <select class="form-control" id="typeClass" name="typeClass">
                                <option value="1" @(ViewBag.userType.typeClass == "1" ? "selected" : "")>学生</option>
                                <option value="2" @(ViewBag.userType.typeClass == "2" ? "selected" : "")>教师</option>
                                <option value="3" @(ViewBag.userType.typeClass == "3" ? "selected" : "")>管理</option>
                            </select>
                        </div>
                        <button type="button" class="layui-btn" onclick="submitForm()">保存</button>
                        <button type="reset" class="layui-btn" onclick="resetUserType()">重置</button>
                    </div>
                </form>
            </div>
        </div>
        <div class="row px-3">
            <div class="col-sm-12" id="tableModular">
                <table id="tabModular" lay-filter="tabModular"></table>
            </div>
        </div>
    </div>
<script>
        //记录原始的选择的ModularDetailIds
        // 1 2 3 4 5
        var ModularDetailIds = new Array();
        //记录增加的ids
        // 6 7
        var insertModularDetailIds = new Array();
        //记录删除的ids
        // 1 2
        var deleteModularDetailIds = new Array();
        var layer, layuiTable;//保存layui模块以便全局使用
        var tabModular;
         //原始的选择的ModularDetailIds
        var strmodularDetailId = "@ViewBag.modularDetailId";
        ModularDetailIds = strmodularDetailId.split(",")
    //console.log(ModularDetailIds)
        //1.0 加载和初始化layui模块
        layui.use(['layer', 'table'], function () {
            layer = layui.layer; layuiTable = layui.table;
            //1.1 表格渲染
            tabModular = layuiTable.render({
                elem: '#tabModular',//html table id
                url: 'SelectModularAndDetail',//数据接口
                cols: [[ //表头
                    { type: 'numbers', title: '序号' },//序号列,title设定标题名称
                    { field: 'ModularName', title: '模块名称', align: 'center' },
                    { title: '操作', templet: setOperate, align: 'center' }//width: 160 指定宽度,align 指定对其方式
                ]]
            });
        });
        function setOperate(data) {
            var btns = "";
            //获取模块明细
            var modularDetailVos = data.ModularDetailVos;
            if (modularDetailVos != null) {
                for (var i = 0; i < modularDetailVos.length; i++) {
                    //console.log(modularDetailVos[i].ModularDetailID)
                    if (ModularDetailIds.indexOf(modularDetailVos[i].ModularDetailID.toString()) > -1) {
                        btns += `<button type="button"
                         class="layui-btn layui-btn-xs"
                         id="btnOperates${modularDetailVos[i].ModularDetailID}" onclick="changeSelect(this)">
                         ${modularDetailVos[i].OpType}</button>`
                    } else {
                        btns += `<button type="button"
                         class="layui-btn layui-btn-xs layui-btn-primary"
                         id="btnOperates${modularDetailVos[i].ModularDetailID}" onclick="changeSelect(this)">
                         ${modularDetailVos[i].OpType}</button>`
                    }
                }
            }
            return btns;
        }
        function changeSelect(ele) {
            //console.log(ele.getAttribute("id"))
            //console.log(ele.id)
            var id = ele.id.substring(11, ele.id.length)
            //如果有layui-btn-primary这个类 说明当前按钮还没有被选择到
            if ($(ele).hasClass("layui-btn-primary")) {
                //选择到该button按钮
                $(ele).removeClass("layui-btn-primary");
                //console.log(ModularDetailIds.indexOf(id))
                if (ModularDetailIds.indexOf(id) == -1) {
                    insertModularDetailIds.push(id)
                } else {
                    //在原始列表中,那么我们不需要将该模块明细添加到 新增数组中
                    if (deleteModularDetailIds.indexOf(id) > -1) {//判断该id 在 删除列表 是否存在
deleteModularDetailIds.splice(deleteModularDetailIds.findIndex(item => item === id),1)
                    }
                }
            } else {
                //如果没有layui-btn-primary这个类 说明当前按钮被选择到
                //取消选择到该button按钮
                $(ele).addClass("layui-btn-primary");
                if (ModularDetailIds.indexOf(id) > -1) {
                    //存在于原始列表
                    deleteModularDetailIds.push(id);
                } else {
                     //不存在于原始列表
                    //判断该id 在增加列表是否存在
                    if (insertModularDetailIds.indexOf(id) > -1) { //存在于删除列表
                        //移除增加列表的id
                        insertModularDetailIds.splice(insertModularDetailIds.findIndex(id => id === id), 1)
                    }
                }

            }

            console.log("新添加的",insertModularDetailIds)
            console.log("需要删除的",deleteModularDetailIds)
    }

        //1.5jquery 表单提交
        function submitForm() {
            $("#insertModularDetailIds").val(insertModularDetailIds);
            $("#deleteModularDetailIds").val(deleteModularDetailIds);
            var userType = $("#UserType").val();
            var describe = $("#Describe").val();
            if (userType != null && describe != null && userType != "" && describe != "") {
                $("#formUserType").ajaxSubmit(function (message) {
                    //提示
                    layer.msg(message.Text, { icon: 0, skin: "layui-layer-molv" });
                    if (message.State) {
                        //设置计时器
                        setTimeout(closeThis, 1000);
                    }
                });
            } else {
                layer.msg("请填写完整", { icon: 0, skin: "layui-layer-molv" });
            }
            layer.msg("请填写完整", { icon: 0, skin: "layui-layer-molv" });
            return false;
    }

    function closeThis() {
        parent.layer.closeAll();
    }
    </script>

控制器主要是用来从数据库中查询数据,并且将视图中的新增,修改,删除的方法提交到数据库中。查询主要为连表查询,因为视图中的自定义表格不会只使用单一张表格,有时候可能会使用三张到四张表格中的数据进行拼接。所以连表查询是在控制器中使用最频繁的查询方式。

        //权限管理
        /// <summary>
        /// 权限设置主页面
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            //获取session中的UserID
            if (Session["UserID"] == null) return Redirect("/Main/Index");
            return View();
        }
        /// <summary>
        /// 新增权限页面
        /// </summary>
        /// <returns></returns>
        public ActionResult JurisdictionInsert()
        {
            if (Session["UserID"] == null) return Redirect("/Main/Index");
            return View();
        }
        /// <summary>
        /// 修改权限页面
        /// </summary>
        /// <param name="UserTypeID"></param>
        /// <returns></returns>
        public ActionResult JurisdictionUpdate(int? UserTypeID)
        {
            try
            {
                SYS_UserType userType = (from tbUserType in myModel.SYS_UserType
                                         where tbUserType.UserTypeID == UserTypeID
                                         select tbUserType).Single();
                string modularDetailId = string.Join(",", myModel.PW_Jurisdiction.Where(m => m.UserTypeID == UserTypeID).Select(m => m.ModularDetailID));
                ViewBag.modularDetailId = modularDetailId;
                ViewBag.userType = userType;
            }
            catch
            {
                return Redirect("/Main/Index");
            }
            return View();
        }
        /// <summary>
        /// 1.0 查询所有的用户类型(超级管理员除外)
        /// </summary>
        /// <param name="layuiTablePage"></param>
        /// <returns></returns>
        public ActionResult SelectUserType(LayuiTablePage layuiTablePage)
        {
            //查询用户类型(除去超级管理员 UserTypeID=1)
            var dbUserTypes = (from tabUserType in myModel.SYS_UserType
                               where tabUserType.UserTypeID != 1 //超级管理员除外
                               orderby tabUserType.UserTypeID descending //倒叙排序
                               select tabUserType);
            int count = dbUserTypes.Count();//获取总数
            List<SYS_UserType> listUserTypes = dbUserTypes
                .Skip(layuiTablePage.GetStartIndex()).
                Take(layuiTablePage.limit).ToList();

            LayuiTableData<SYS_UserType> layuiTableData = new LayuiTableData<SYS_UserType>();
            layuiTableData.count = count;
            layuiTableData.data = listUserTypes;
            return Json(layuiTableData, JsonRequestBehavior.AllowGet);
        }
        public bool isAnyone(int UserTypeID)//根据用户类型ID查询用户角色明细表中是否有用户
        {
            var listUser = myModel.PW_UserRoleDetail.Where(m => m.UserTypeID == UserTypeID).ToList();
            if (listUser.Count == 0)
            {
                return false;//该用户类型下没有人
            }
            else
            {
                return true;//该用户类型下有人
            }
        }
        /// <summary>
        /// 1.1 修改用户的状态
        /// </summary>
        /// <param name="UserTypeID"></param>
        /// <param name="toVoidNo"></param>
        /// <returns></returns>
        public ActionResult ModifyUserTypeState(int UserTypeID, bool toVoidNo)
        {
            ReturnJson msg = new ReturnJson();
            try
            {
                SYS_UserType dbUserType = myModel.SYS_UserType.Where(m => m.UserTypeID == UserTypeID).Single();
                if (!toVoidNo && isAnyone(dbUserType.UserTypeID))
                {
                    //有用户的用户类型是不能作废的
                    msg.Text = "该用户类型下面有用户数据,故不能作废该用户类型";
                }
                else
                {
                    dbUserType.ToVoidNo = toVoidNo;
                    myModel.Entry(dbUserType).State = EntityState.Modified;
                    if (myModel.SaveChanges() > 0)
                    {
                        msg.State = true;
                        msg.Text = "切换成功";
                    }
                    else
                    {
                        msg.Text = "切换失败";
                    }
                }
            }
            catch (Exception)
            {
                msg.Text = "数据异常!";
            }
            return Json(msg, JsonRequestBehavior.AllowGet);
        }
        /// <summary>
        /// 1.2 删除用户类型
        /// </summary>
        /// <param name="UserTypeID">用户类型ID</param>
        /// <returns></returns>
        public ActionResult DeleteUserType(int UserTypeID)
        {
            ReturnJson msg = new ReturnJson();
            try
            {
                if (!isAnyone(UserTypeID))//判断该用户类型 下面有没有用户
                {
                    //如果该用户类型下面 不存在用户 那么可以删除该用户类型数据
                    List<PW_Jurisdiction> jurisdictions = myModel.PW_Jurisdiction.Where(m => m.UserTypeID == UserTypeID).ToList();
                    if (jurisdictions.Count > 0)
                    {
                        //删除上面的集合
                        myModel.PW_Jurisdiction.RemoveRange(jurisdictions);
                    }
                    //删除UserType
                    SYS_UserType dbUserType = myModel.SYS_UserType.Where(m => m.UserTypeID == UserTypeID).Single();
                    myModel.SYS_UserType.Remove(dbUserType);
                    myModel.SaveChanges();
                    msg.State = true;
                    msg.Text = "删除成功!";
                }
                else
                {//如果有用户信息 则不能删除该用户类型
                    msg.Text = "该用户类型下面存在用户,故不能删除该用户类型";
                }
            }
            catch (Exception)
            {
                msg.Text = "数据异常!";
            }
            return Json(msg, JsonRequestBehavior.AllowGet);
        }
        /// <summary>
        /// 2.0查询模块和对应明细信息
        /// </summary>
        /// <param name="layuiTablePage"></param>
        /// <returns></returns>
        public ActionResult SelectModularAndDetail(LayuiTablePage layuiTablePage)
        {
            //模块表总数
            int ModularCount = myModel.SYS_Modular.Count();
            List<ModularAndDetail> modularAndDetails = (from tbModular in myModel.SYS_Modular
                                                        orderby tbModular.ModularID descending
                                                        select new ModularAndDetail
                                                        {
                                                            ModularID = tbModular.ModularID,
                                                            ModularName = tbModular.ModularName,
                                                            ModularDetailVos = (from tbModularDetail in myModel.SYS_ModularDetail
                                                                                join tbOpType in myModel.SYS_OpType on tbModularDetail.OpTypeID equals tbOpType.OpTypeID
                                                                                where tbModularDetail.ModularID == tbModular.ModularID
                                                                                orderby tbModularDetail.ModularDetailID
                                                                                select new ModularDetail
                                                                                {
                                                                                    ModularDetailID = tbModularDetail.ModularDetailID,
                                                                                    OpTypeID = tbModularDetail.OpTypeID,
                                                                                    OpType = tbOpType.OpType.Trim()
                                                                                }).ToList()
                                                        }).ToList();
            LayuiTableData<ModularAndDetail> layuiTableData = new LayuiTableData<ModularAndDetail>();
            layuiTableData.count = ModularCount;
            layuiTableData.data = modularAndDetails;
            return Json(layuiTableData, JsonRequestBehavior.AllowGet);
        }

        public ActionResult InsertUserType(SYS_UserType modUserType,string modularDetailIds)
        {
            ReturnJson msg = new ReturnJson();
            //事务回滚
            using (var scope = new TransactionScope())//需要添加引用  System.Transactions
            {
                try
                {
                    //(1)判断不重复
                    if (!string.IsNullOrEmpty(modUserType.UserType) && !string.IsNullOrEmpty(modularDetailIds))
                    {
                        int userTypeCount = myModel.SYS_UserType.Where(m => m.UserType == modUserType.UserType).Count();
                        if (userTypeCount > 0)
                        {
                            msg.Text = "角色重复,请更改用户类型名称!";
                        }
                        else
                        {//(一)新增UserType
                            modUserType.ToVoidNo = false;
                            modUserType.FoundTime = DateTime.Now.ToString();
                            myModel.SYS_UserType.Add(modUserType);
                            myModel.SaveChanges();
                            //获得新增的新增UserTypeID
                            int userTypeId = modUserType.UserTypeID;
                            //分割modularDetailIds
                            //234,45,56,7
                            string[] strings = modularDetailIds.Split(',');
                            //遍历 新增权限
                            foreach(string s in strings)
                            {
                                //(二)新增权限表
                                PW_Jurisdiction jurisdiction = new PW_Jurisdiction();
                                jurisdiction.UserTypeID = userTypeId;
                                jurisdiction.ModularDetailID = Convert.ToInt32(s);
                                myModel.PW_Jurisdiction.Add(jurisdiction);
                                myModel.SaveChanges();
                            }
                            //提交事务(设定交易完成)
                            //作用:可以让我们在处理交易的时候,可以确保交易的完整性。
                            scope.Complete();

                            msg.State = true;
                            msg.Text = "保存成功";
                        }
                    }
                    else
                    {
                        msg.Text = "数据不完整!";
                    }
                }
                catch (Exception)
                {
                    msg.Text = "数据异常!";
                }
                return Json(msg, JsonRequestBehavior.AllowGet);
            }
        }
        public ActionResult UpdateUserType(SYS_UserType modUserType, string insertModularDetailIds, string deleteModularDetailIds)
        {
            ReturnJson msg = new ReturnJson();
            using (var scope = new TransactionScope())
            {
                try
                {
                    int userTypeCount = (from tb in myModel.SYS_UserType
                                         where tb.UserType == modUserType.UserType && tb.UserTypeID != modUserType.UserTypeID
                                         select tb).Count();
                    if (userTypeCount == 0)
                    {
                        //修改userType 角色
                        SYS_UserType dbUserType = myModel.SYS_UserType.Where(m => m.UserTypeID == modUserType.UserTypeID).Single();

                        dbUserType.UserType = modUserType.UserType;
                        dbUserType.Describe = modUserType.Describe;
                        dbUserType.typeClass = modUserType.typeClass;
                        myModel.Entry(dbUserType).State = EntityState.Modified;
                        myModel.SaveChanges();

                        List<PW_Jurisdiction> addJurisdictions = new List<PW_Jurisdiction>();
                        List<PW_Jurisdiction> deleteJurisdictions = new List<PW_Jurisdiction>();
                        //分割 记录增加的模块明细ids
                        string[] strInsertIds = insertModularDetailIds.Split(',');
                        foreach (string id in strInsertIds)
                        {
                            if (id != "")
                            {
                                PW_Jurisdiction m = new PW_Jurisdiction();
                                m.UserTypeID = modUserType.UserTypeID;
                                m.ModularDetailID = Convert.ToInt32(id);
                                addJurisdictions.Add(m);
                            }
                        }
                        if (addJurisdictions.Count > 0)
                        {
                            myModel.PW_Jurisdiction.AddRange(addJurisdictions);
                            myModel.SaveChanges();
                        }

                        string[] strDeleteIds = deleteModularDetailIds.Split(',');
                        foreach (string deleteId in strDeleteIds)
                        {
                            if (deleteId != "")
                            {
                                int intdeleteId = Convert.ToInt32(deleteId);
                                PW_Jurisdiction jurisdiction = (from tbJurisdiction in myModel.PW_Jurisdiction
                                                                where
                                                                    tbJurisdiction.UserTypeID == modUserType.UserTypeID &&
                                                                    tbJurisdiction.ModularDetailID == intdeleteId
                                                                select tbJurisdiction).Single();
                                deleteJurisdictions.Add(jurisdiction);
                            }
                        }
                        if (deleteJurisdictions.Count > 0)
                        {
                            myModel.PW_Jurisdiction.RemoveRange(deleteJurisdictions);
                            myModel.SaveChanges();
                        }
                        //提交事务
                        scope.Complete();
                        msg.State = true;
                        msg.Text = "修改成功";
                    }
                    else
                    {
                        msg.Text = "角色重复,请更改用户类型名称!";
                    }
                }
                catch (Exception)
                {
                    msg.Text = "数据异常!";
                }
            }
            return Json(msg, JsonRequestBehavior.AllowGet);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值