• 权限管理系统-根据权限获取菜单


    权限管理系统-根据权限获取菜单

    不知不觉到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;
                }
            }

    别忘记在Home的Controller传入用户的ID

    预览下效果

    果真是我们要的效果

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

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

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

    Gradle中使用idea插件的一些实践

     

    如果你的项目使用了Gradle作为构建工具,那么你一定要使用Gradle来自动生成IDE的项目文件,无需再手动的将源代码导入到你的IDE中去了。

    如果你使用的是eclipse,可以在build.gradle中加入这么一行.

    1
    
    apply plugin: 'eclipse'
    

    然后在命令行中输入gradle eclipse就可以生成eclipse的项目文件,直接使用eclipse打开生成的项目文件即可。

    当然作为Java程序开发者,最好使的IDE还是Intellij,昨天听闻Intellij 13已经发布了,增加了不少新功能,看来又要掏腰包了。如果要让Gradle自动生成Intellij的项目文件,需要使用idea插件。

    1
    
    apply plugin: 'idea'
    

    命令行下输入gradle idea,就会生成Intellij的项目文件,真是省时省力。如果在已经存在Intellij的项目文件情况下,想根据build.gradle中的配置来更新项目文件,可以输入gradle cleanIdea ideacleanIdea可以清除已有的Intellij项目文件。

    Intellij项目文件主要有三种类型。

    • .ipr Intellij工程文件

    • .iml Intellij 模块文件

    • .iws Intellij 工作区文件

    如果只简单的使用gradle idea生成Intellij的工程文件,其实在使用Intellij打开项目以后,我们还要做一些手工配置,比如指定JDK的版本,指定源代码管理工具等。Gradle的idea命令本质上就是生成这三个xml文件,所以Gradle提供了生成文件时的hook(钩子),让我们可以方便的做定制化,实现最大程度的自动化。这就需要自定义idea这个任务了。

    1
    2
    3
    4
    
    idea.project {
         jdkName = '1.6'
         languageLevel = '1.6'
    }
    

    这个用来配置项目的jdk及languageLevel。

    如果要指定源代码管理工具类型,就需要调用hook修改生成的ipr文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    idea.project {
        ipr {
            withXml { provider ->
                provider.node.component.find { it.@name == 'VcsDirectoryMappings' }.mapping.@vcs = 'Git'
            }
        }
    }
    

    通过这种方式可以最大限度的实现对Intellij项目文件的定制化。

  • 相关阅读:
    CF453A
    各种算法的复杂度
    状压dp--P2622 关灯问题II
    笛卡尔树模板
    20201122模拟
    nm树上背包+二分--P4322 [JSOI2016]最佳团体
    20201121模拟
    20201119模拟
    斜率优化--P3195 [HNOI2008]玩具装箱
    网络流--最大流,最小割,费用流问题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3458609.html
Copyright © 2020-2023  润新知