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