在用戶成功登陸后台頁面后,我們需要將當前用戶擁有的權限通過菜單的形式展現出來,將未具備的權限隱藏
新建一個HomeController,用於展示后台首頁和獲取用戶權限數據
namespace CZBK.ItcastOA.WebApp.Controllers { public class HomeController : BaseController { // // GET: /Home/ IBLL.IUserInfoService UserInfoService { get; set; } public ActionResult Index() { ViewData["name"]=LoginUser.UName; return View(); } public ActionResult HomePage() { return View(); } #region 過濾登錄用戶的菜單權限 /// <summary> /// 1: 可以按照用戶---角色---權限這條線找出登錄用戶的權限,放在一個集合中。 /// 2:可以按照用戶---權限這條線找出用戶的權限,放在一個集合中。 /// 3:將這兩個集合合並成一個集合。 /// 4:把禁止的權限從總的集合中清除。 /// 5:將總的集合中的重復權限清除。 /// 6:把過濾好的菜單權限生成JSON返回。 /// </summary> /// <returns></returns> public ActionResult Getmenus() { //1: 可以按照用戶---角色---權限這條線找出登錄用戶的權限,放在一個集合中。 //獲取登錄用戶的信息 var userInfo = UserInfoService.LoadEntities(u=>u.ID==LoginUser.ID).FirstOrDefault(); //獲取登錄用戶的角色. var userRoleInfo = userInfo.RoleInfo; //根據登錄用戶的角色獲取對應的菜單權限。 short actionTypeEnum = (short)ActionTypeEnum.MenumActionType; var loginUserMenuActions = (from r in userRoleInfo from a in r.ActionInfo where a.ActionTypeEnum == actionTypeEnum select a).ToList(); // 2:可以按照用戶---權限這條線找出用戶的權限,放在一個集合中。 var userActions = from a in userInfo.R_UserInfo_ActionInfo select a.ActionInfo; var userMenuActions =(from a in userActions where a.ActionTypeEnum == actionTypeEnum select a).ToList(); // a.ActionInfo不是一個集合,注意理解權限表與用戶權限關系表之間的對應關系 //var userMenuActionse = from a in userInfo.R_UserInfo_ActionInfo // from b in a.ActionInfo // where b.ActionTypeEnum == actionTypeEnum // select b; //3:將這兩個集合合並成一個集合。 loginUserMenuActions.AddRange(userMenuActions); //4:把禁止的權限從總的集合中清除。 var forbidActions = (from a in userInfo.R_UserInfo_ActionInfo where a.IsPass == false select a.ActionInfoID).ToList(); var loginUserAllowActions=loginUserMenuActions.Where(a=>!forbidActions.Contains(a.ID)); //5:將總的集合中的重復權限清除。 var lastLoginUserActions=loginUserAllowActions.Distinct(new EqualityComparer()); //6:把過濾好的菜單權限生成JSON返回。 var temp = from a in lastLoginUserActions select new { icon = a.MenuIcon, title = a.ActionInfoName, url=a.Url}; return Json(temp,JsonRequestBehavior.AllowGet); } #endregion } }
HomeController下的GetMenu方法返回的是一個 菜單圖片、菜單名稱、操作路徑的二維JSON數組