zoukankan      html  css  js  c++  java
  • 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数组

  • 相关阅读:
    Linux文件目录结构详解
    Linux常用命令学习
    51Nod 1094 和为k的连续区间 | 水
    (转) jsp学习笔记
    Hadoop到底能做什么?怎么用hadoop?
    51Nod 1092 回文字符串 | 最长公共子序列变形
    51Nod 1067 Bash游戏 V2 | 博弈论 Bash
    51Nod 1062 序列中最大的数 | 简单DP
    51Nod 1050 循环数组最大子段和 | DP
    HDU 5643 King's Game | 约瑟夫环变形
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/7866539.html
Copyright © 2011-2022 走看看