原文:
不知不觉到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大神!!!!