ASP.NET MVC5+EF6+EasyUI 後臺管理系統(20)-權限管理系統-根據權限獲取菜單

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

相關文章
相關標籤/搜索