需求描述:
在一些后台管理系统中,每个身份登录的权限不一样,以至于配置的菜单不一样。就我做过的小区物业管理系统而言,举个例子:业主登录网站只能看到社区服务中的投诉、维修以及查看公告。而管理员可以看到一些对本小区的基本操作,例如查看楼栋,查看业主,账单催缴等等…而超级管理员,可以看到所有界面,以及处理一些审核等等一系列。那么这个时候,我们没必要每个身份做一个系统,而是通过权限管理,对每种身份做配置;
以下为部分页面展示:
①设置职位和权限:查看所有职位,以及对职位增删查改,“配置权限”是一个超链接,到另一个页面,就是对该职位进行菜单配置:
在这里插入图片描述
②配置权限:对该职位进行菜单配置。需要注意的是,菜单有二级菜单,那么在进入此页面的时候,初始权限的复选框必须是勾选上的,以及怎么对此进行处理,是一个小难点
在这里插入图片描述
思路分析:
1、在“配置权限”超链接上,用问号传参,把当前职位的ID传入配置权限页
在这里插入图片描述

2、在“配置权限”的操作方法中,用viewBag或viewData保存一下职位ID
3、在“配置权限”视图中,放一个隐藏input存value为viewData,也就是当前职位的ID
在这里插入图片描述

4、在当前“配置权限”视图中的确认按钮下面,将当前复选框的值和职位ID的值一起用ajax送入后台控制器中的确认按钮操作方法当中
前台ajax:

<script type="text/javascript">
    //确定按钮
    function InsertData() {
        var obj = "";//定义一个字符串变量,用来存放复选框的值
        var Did = $("#Did").val();//职位ID
        $('input[name="itemcheck"]:checked').each(function () {
            obj += $(this).val()+",";
        });//遍历存放复选框的值
        var data = { obj: obj, Did: Did }
        $.ajax({
            //地址改掉 这是给你类赋值的方法
            url: "/SetPosition/InsertData",
            data: data,
            type: "POST",
            success: function (data) {
                if (data.mag == 1) {
                    alert('提交成功!');
                    window.location.href = "/SetPosition/Index";
                }
                else {
                    alert('提交成功!');
                }
            },
            error: function (msg) {
                alert("error:" + msg.responseText);
            }
        });
    }
</script>

5、后台:先找到总功能表,再根据当前从职位ID里传的在权限表中查询的当前职位有哪些,再把当前职位这个人有的功能全删掉,再重新遍历,把前台传过来的勾选的功能与原功能对比,如果一样就放到权限表里去

[HttpPost]
        public ActionResult InsertData(string obj,int Did)
        {
            var newobj = obj.Split(',');
            ZeroEntities db = new ZeroEntities();
            var list= db.tb_Fcuntion.ToList();
            var listDF = db.tb_DegreeFunc.Where(P => P.DegreeID == Did).ToList();
            if (listDF.Count()>0)
            {
                foreach (var item in listDF)
                {
                    db.tb_DegreeFunc.Remove(item);
                }
            }
            for (int i = 0; i < newobj.Count() - 1; i++)
            {
                foreach (var item in list)
                {
                    if (newobj[i].ToString() != "")
                    {
                        if (newobj[i].ToString() == item.FctionID.ToString())
                        {
                            var Setobj = new tb_DegreeFunc()
                            {
                                DegreeID = Did,
                                DegreeFuncID = item.FctionID,
                                FunctionID = item.FctionID,
                                FunctionIDtow = item.FctionIDtow,
                                FunctionName=item.FctionName,
                                url = item.url
                            };
                            db.tb_DegreeFunc.Add(Setobj);
                        }
                    }

                }

            }


            if (db.SaveChanges() > 0)
            {
                var massge = new { mag = "1" };
                return Json(massge);
            }
            else
            {
                var massge = new { mag = "0" };
                return Json(massge);
            }
        }

PS:权限配置视图的菜单怎么显示:
根据当前登录人在权限表中国找到所有功能,在定义一个int集合,存挡圈登录人的二级菜单字段,在用list2找到总功能表的一级菜单,这样一级菜单和二级菜单ID就都找到了,然后对比相同的放list3
“配置权限”控制器操作方法代码:

public ActionResult SetJurisdiction(int Did)
        {
            ViewData["Did"] = Did;
            ZeroEntities db = new ZeroEntities();
            ViewData["listOne"] = db.tb_Fcuntion.Where(f => f.FctionIDtow == 0).ToList();
            var list1 = db.tb_DegreeFunc.Where(p => p.DegreeID == Did).ToList();
            var list2= db.tb_Fcuntion.Where(f=>f.FctionIDtow!=0) .ToList();
            var listsum = new List<SetJurisdictions>();
            for (int i = 0; i < list1.Count(); i++)
            {
                for (int j = 0; j < list2.Count; j++)
                {
                    if (list1[i].FunctionID == list2[j].FctionID)
                    {
                        list2.Remove(list2[j]);
                    }
                }
            }
            foreach (var item1 in list1)
            {
                foreach (var item2 in list2)
                {
                    if (item1.FunctionID == item2.FctionID)
                    {
                        list2.Remove(item2);
                    }
                }
            }
            foreach (var item in list2)
            {
                var obj = new SetJurisdictions()
                {
                    FctionID = item.FctionID,
                    FctionName=item.FctionName,
                    FctionIDtow=item.FctionIDtow,
                    isChecked="false"
                };
                listsum.Add(obj);
            }
            foreach (var item in list1)
            {
                var obj = new SetJurisdictions()
                {
                    FctionID = item.FunctionID,
                    FctionName = item.FunctionName,
                    FctionIDtow = item.FunctionIDtow,
                    isChecked = "ture"
                };
                listsum.Add(obj);
            }
            listsum = listsum.OrderBy(p => p.FctionID).ToList();
            ViewData["SetJurisdictions"] = listsum;
            return View();
        }

“配置权限”视图代码:

<div class="row">
    <div class="col-lg-12">
        <div class="x_panel" style="width:98.8%;margin-left:15px;">
            <div class="x_title">
                <h2>功能菜单</h2>
                <div class="xbox-more">
                    <button type="button" class="btn btn-primary btn-sm" onclick="InsertData()">
                        确认
                    </button>
                </div>
                <div class="clearfix"></div>
            </div>
            <div class="x_content">
                <input type="hidden" id="Did" value="@ViewData["Did"].ToString()"/>
                <div class="table-responsive">
                    <table id="ComplaintTable" class="table  jambo_table bulk_action">
                        <thead>
                            <tr>
                                <th class="column-title text-center">菜单名</th>
                                <th class="column-title text-center"><input type="checkbox" id="allcheck" onchange="All()" />  功能名</th>
                            </tr>
                        <thead>
                        <tbody id="t_body">
                            @{
                                int a = 0;
                                //var list = ViewBag.list as List<WebApplication2.Models.MatherboadrModel.tb_DegreeFunc>;
                                var listOne= ViewData["listOne"] as List<WebApplication2.Models.MatherboadrModel.tb_Fcuntion>;
                            }
                            @foreach (var item in ViewData["SetJurisdictions"] as List<WebApplication2.Controllers.Position.SetPositionController.SetJurisdictions>)
                            {
                                a++;
                            <tr class="pointer">
                                @{ 
                                    var cd = listOne.Where(p => p.FctionID == item.FctionIDtow).FirstOrDefault().FctionName;
                                }
                                <td class="text-center " id="complaintId" style="border-right:1px solid #E6E9ED">@cd</td>
                                <td class="text-center " id="complaintId">
                                    @if (item.isChecked == "false")
                                    {
                                        <input type="checkbox" name="itemcheck" onchange="Items()" value="@item.FctionID" /> @item.FctionName
                                    }
                                    else
                                    {
                                        <input type="checkbox" name="itemcheck" checked="checked" onchange="Items()" value="@item.FctionID" /> @item.FctionName
                                    }
                                </td>
                            </tr>
                            }
                        </tbody>
                    </table>
                    <div class="btn-group">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

那么,还有一些全选框的脚本代码就不放啦,以上描述足够做出权限管理了。
整理不到位,因为主要还是给自己看的,见谅

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐