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数组

  • 相关阅读:
    npm publish 失败可能的原因记录
    nodejs版实现properties后缀文件解析
    CSS 毛玻璃效果
    echarts markLine 辅助线非直线设置
    sql 数据类型 建表时如何选择数据类型
    用row_nuber 分页的存储过程
    错误描述:未能找到路径“C:/”的一部分
    设置VS2010默认以管理员权限启动
    通过做nopcommerce电商项目对EF的理解(一)
    获取多表联合查询的存储过程。
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/7866539.html
Copyright © 2011-2022 走看看