系列目錄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大神!!!!