权限管理系统-根据权限获取菜单
2013-12-04 23:26
375 查看
权限管理系统-根据权限获取菜单
不知不觉到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 idea。
cleanIdea可以清除已有的Intellij项目文件。
Intellij项目文件主要有三种类型。
.ipr Intellij工程文件
.iml Intellij 模块文件
.iws Intellij 工作区文件
如果只简单的使用
gradle idea生成Intellij的工程文件,其实在使用Intellij打开项目以后,我们还要做一些手工配置,比如指定JDK的版本,指定源代码管理工具等。Gradle的idea命令本质上就是生成这三个xml文件,所以Gradle提供了生成文件时的hook(钩子),让我们可以方便的做定制化,实现最大程度的自动化。这就需要自定义idea这个任务了。
12 | idea.project { jdkName = '1.6' languageLevel = '1.6' } |
如果要指定源代码管理工具类型,就需要调用hook修改生成的ipr文件。
12 | idea.project { ipr { withXml { provider -> provider.node.component.find { it.@name == 'VcsDirectoryMappings' }.mapping.@vcs = 'Git' } } } |
相关文章推荐
- Python源码学习十一 一个常用的内存分配函数
- Java分形
- 未分类--Windows API--GetProcessHeap Function
- cocos 2d x 在运行时候修改分辨率
- Working Practice-使用清单记录总结代码审核的问题
- JAVA方面,有点二的问题
- fzu 1911 Construct a Matrix(矩阵快速幂+规律)
- 你可知道利用独立博客进行淘宝客推广方法
- 串口的历程库
- root lenovo A690
- 数据共享+指向自身类型的指针+智能指针
- Linux 磁盘与文件系统管理
- 完美编译 firefly+cocos2d-x对战类手机网游《进击的9秒》V1.1版本的win32版本
- How to run scripts under Linux
- win32中调用Atl控件
- 电脑报2013年第4期
- mysql
- Android开发之旅:环境搭建及HelloWorld
- ORA-01123:无法启动联机备份;未启用介质恢复(错误分析)
- linux简单命常用令