2018教程之mvc+ef + identity之七:角色权限系统菜单之读出当前用户的所有菜单
这个直接上后台吧。
/// <summary> /// 返回当前的角色所拥有的菜单 /// </summary> /// <param name="disposing"></param> [HttpGet] public ActionResult ShowRoleMenu() { ///是否登录 if (!Request.IsAuthenticated) { return RedirectToAction("Login", "Account"); } ///获取当前用户的id var userID = User.Identity.GetUserId(); ///先读出当前用户表对应的所有的ROLES表,但只有rolename. var rolses = UserManager.GetRoles(userID); ///先读出当前用户的完整表. var alluser = UserManager.FindById(userID); ///先读出当前所有的ROLES表. var allrolses = RoleManager.Roles.ToList(); ///皮配出这个用户ID的角色列表ID出来 var user_roleid = allrolses.Where(x => rolses.Contains(x.Name)).Select(n =>n.Id).ToList(); //var rolses = RoleManager.Roles.ToList(); //这里是所有角色,不是当前用户的角色 //var roleIds = rolses.Select(m => m.id).ToList(); var role_menus = db.RoleMenus.Where(m => user_roleid.Contains(m.RoleId)).ToList();//查询出角色关联表的所有数据 //var role_menus = db.RoleMenus.Where(m =>m.RoleId== rolses.Select(x=>x.id) rolses.Contains(m.RoleId)).ToList();//查询出角色关联表的所有数据 var menuIds = role_menus.Select(n => n.MenuId).ToArray(); var menus = db.MenuInfos.OrderBy(x => x.Sort).Where(m => menuIds.Contains(m.Id)).ToList();//查询出菜单数据 ///下面进行表的读成菜单样式 ///定义一个变量result的MenuInfo列表变量 var result = new List<MenuInfo>(); ///读出所有的一级菜单 var level0 = menus.Where(m => m.Popedomfatherid == 0).ToList(); ///对所有一级菜单进行一次循环。 foreah (var xx in level0) 这种一样 level0.ForEach(item => { ///定义一个children字菜单变量,当他的Popedomfatherid=当前循环的ID,取出当前的所有字菜单 var children = menus.Where(m => m.Popedomfatherid == item.Id).ToList(); /////为新定义的result变量增加一个 一级菜单 result.Add(item); ///为新定义的result变量增加一个 所有的字菜单 result.AddRange(children); }); //ViewBag.List = result; return View(result); }
自己写的时候不懂,用了八个步骤。唉
新人就这样,不过功能是有了