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);
}
自己写的时候不懂,用了八个步骤。唉
新人就这样,不过功能是有了
浙公网安备 33010602011771号