• 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(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大神!!!

  • 相关阅读:
    MySQL日志15连问
    Call to undefined function cli_set_process_title,cli_set_process_title 信息/选项函数
    swoole 笔记
    linux 查找目录下的所有文件中是否包含某个字符串
    请说下redis命令的时间复杂度??(实际问的是redis底层结构)
    Elasticsearch:Fatal error: Uncaught Error: Class PsrLogNullLogger
    ElasticSearch近实时搜索的实现
    离职后心生不满,西安某医院运维“炫技性报复”破坏诊疗系统,被依法刑拘...
    报错: libmysqlclient.so.20: cannot open shared object file: No such file or directory(亲测可用)
    中国程序员有美国梦吗?
  • 原文地址:https://www.cnblogs.com/zhangjunwei87/p/4691191.html
Copyright © 2020-2023  润新知