• ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单


    系列目录

    不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多的时间来更新,多谢大家的一路支持.如果你觉得好,记得帮我点击推荐^-^

    我们在之前已经插入一些真实数据,其中包含了一个用户和样例程序SysSample的权限,并实现了用户的登录。

    但有的朋友对表还是有疑惑,通过下面的linq查询,应该你就没有这个困惑了。

    不出意外,我们的菜单栏将只显示样例程序这个模块。

    这就简单了,我们已经有了获取菜单栏的类了,只要加入用户参与判断即可,所以我们将修改

    IBLL BLL IDAL DAL层的Home类(红色为原来的,绿色为最新修改的)

     List<SysModule> GetMenuByPersonId(string moduleId);

    List<SysModule> GetMenuByPersonId(string personId, string moduleId);

    ---------------------------

    public List<SysModule> GetMenuByPersonId(string moduleId)
            {
                return HomeRepository.GetMenuByPersonId(moduleId);
            }

     public List<SysModule> GetMenuByPersonId(string personId, string moduleId)
            {
                return HomeRepository.GetMenuByPersonId(personId,moduleId);
            }

    ---------------------------

    List<SysModule> GetMenuByPersonId(string moduleId);

    List<SysModule> GetMenuByPersonId(string personId, string moduleId);

    ---------------------------

    最后看到DAL层,这里是获取菜单逻辑代码

     public List<SysModule> GetMenuByPersonId(string moduleId)
            {
                using (DBContainer db = new DBContainer())
                {
                    var menus =
                    (
                        from m in db.SysModule
                        where m.ParentId == moduleId
                        where m.Id != "0"
                        select m
                              ).Distinct().OrderBy(a=>a.Sort).ToList();
                    return menus;
                }
            }

       public List<SysModule> GetMenuByPersonId(string personId, string moduleId)
            {
                using (DBContainer db = new DBContainer())
                {
                    var menus =
                    (
                        from m in db.SysModule
                        join rl in db.SysRight
                        on m.Id equals rl.ModuleId
                        join r in
                            (from r in db.SysRole
                             from u in r.SysUser
                             where u.Id == personId
                             select r)
                        on rl.RoleId equals r.Id
                        where rl.Rightflag == true
                        where m.ParentId == moduleId
                        where m.Id != "0"
                        select m
                              ).Distinct().OrderBy(a => a.Sort).ToList();
                    return menus;
                }
            }

    最后更该controller的home方法GetTree

      /// <summary>
            /// 获取导航菜单
            /// </summary>
            /// <param name="id">所属</param>
            /// <returns></returns>
            public JsonResult GetTree(string id)
            {
                if (Session["Account"] != null)
                {
                    AccountModel account = (AccountModel)Session["Account"];
                    List<SysModule> menus = homeBLL.GetMenuByPersonId(account.Id, id);
                    var jsonData = (
                            from m in menus
                            select new
                            {
                                id = m.Id,
                                text = m.Name,
                                value = m.Url,
                                showcheck = false,
                                complete = false,
                                isexpand = false,
                                checkstate = 0,
                                hasChildren = m.IsLast ? false : true,
                                Icon = m.Iconic
                            }
                        ).ToArray();
                    return Json(jsonData, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json("0", JsonRequestBehavior.AllowGet);
                }
            }

    预览下效果

    果真是我们要的效果

    现在要做的就是把之前那些日志管理,异常管理等等加入到数据表中看看效果了。

    通过这里你可以熟悉下数据流。

    但我总觉得上面的linq语句是可以继续优化的,求linq大神!!!!

  • 相关阅读:
    apache安装 解决无services
    需要看的书
    rbac
    IDocHostShowUI
    Eclipse快捷键大全
    Linux中vi显示中文乱码的问题
    如何编译安装Go语言
    ubuntu11.04 下LAMP 开发环境配置
    网络内核sk_buff结构体
    查看所有表名,查询结果加上字符
  • 原文地址:https://www.cnblogs.com/ymnets/p/3456677.html
Copyright © 2020-2023  润新知