系列目录html
不知不觉到20讲,真是漫长的日子,惋惜最近工做挺忙,要不能够有更多的时间来更新,多谢你们的一路支持.若是你以为好,记得帮我点击推荐^-^json
咱们在以前已经插入一些真实数据,其中包含了一个用户和样例程序SysSample的权限,并实现了用户的登陆。优化
但有的朋友对表仍是有疑惑,经过下面的linq查询,应该你就没有这个困惑了。spa
不出意外,咱们的菜单栏将只显示样例程序这个模块。日志
这就简单了,咱们已经有了获取菜单栏的类了,只要加入用户参与判断便可,因此咱们将修改code
IBLL BLL IDAL DAL层的Home类(红色为原来的,绿色为最新修改的)htm
List<SysModule> GetMenuByPersonId(string moduleId); blog
List<SysModule> GetMenuByPersonId(string personId, string moduleId);get
---------------------------string
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大神!!!!