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

 

转载于:https://www.cnblogs.com/xiaoliwang/p/7866539.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值