MVC基於角色權限控制--菜單展示


在用戶成功登陸后台頁面后,我們需要將當前用戶擁有的權限通過菜單的形式展現出來,將未具備的權限隱藏

新建一個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數組

 


免責聲明!

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



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