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


系列目錄

不知不覺到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;
            }
        }

最后更該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大神!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM