public async Task <RoleAssigMenuViewModel> GetRoleAssigMenuViewModels(Guid RoleId) { #region 获取所有的菜单和按钮 var list = this._menuRepositoty.GetAll(x => x.IsDrop == false).ToList(); //获取所有的菜单列表 var RoleAssigMenu = MyMappers.ObjectMapper.Map <List <SysMenu>, List <RoleAssigMenuViewModel> >(list); var buttonlist = _buttonRepositoty.GetAll(x => x.IsDrop == false); //获取所有的按钮列表 //var RoleAssigButton = MyMappers.ObjectMapper.Map<List<SysButton>, List<RoleAssigButtonViewModel>>(buttonlist); RoleAssigMenuViewModel roleAssigMenuView = new RoleAssigMenuViewModel() { Id = Guid.Empty, expand = true, title = "根节点", disabled = false, @checked = false, }; var SysbuttonList = await _buttonRepositoty.GetAllListAsync(x => x.IsDrop == false);//获取所有的菜单按钮列表 #endregion #region 获取该角色下的所有权限 var roleRight = await _roleRightAssigRepository.GetAllListAsync(x => x.RoleId == RoleId); #endregion //调用递归事件 CreateRoleAssigTree(RoleAssigMenu, roleAssigMenuView, SysbuttonList, roleRight); //dynamic var = LinqTosql(); return(roleAssigMenuView); }
/// <summary> /// /// </summary> /// <param name="AllroleAssig">所有菜单</param> /// <param name="roleAssigMenuView">根节点</param> /// <param name="sysMenuButtonList">菜单按钮列表数据</param> /// <param name="roleAssigButtonViews">按钮列表</param> /// /// <param name="sysRoleRights">已拥有的权限对象</param> public void CreateRoleAssigTree(List <RoleAssigMenuViewModel> AllroleAssig, RoleAssigMenuViewModel roleAssigMenuView, List <SysButton> sysButtonList, List <SysRoleRight> sysRoleRights ) { var child = AllroleAssig.FindAll(m => m.ParentId == roleAssigMenuView.Id); if (child.Any())//判断是否存在子级 { roleAssigMenuView.children.AddRange(child); } foreach (var item in child) { var buttonlist = sysButtonList.Where(x => x.MenuId == item.Id).Select(x => x.Id).ToList(); //获取到此菜单下的所有按钮Id #region //根据菜单ID判断角色权限内是否存在该菜单的权限(如果存在证明已有改权限) var model = sysRoleRights.Where(x => x.MenuId == item.Id).FirstOrDefault(); if (model != null) { item.@checked = true; } if (buttonlist.Any()) { var button = sysButtonList.Where(x => x.MenuId == item.Id).ToList();//拿到该菜单下面的所有按钮 var nButton = new List <RoleAssigButtonViewModel>(); //判断是否存在角色权限表中 if (model != null) { foreach (var btnitem in button) { var buttons = model.ButtonIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.ToGuid()).ToList(); var btn = buttons.Where(x => x == btnitem.Id).FirstOrDefault(); if (btn != Guid.Empty) { nButton.Add(new RoleAssigButtonViewModel { Id = btnitem.Id, @checked = true, lable = btnitem.Name }); } else { nButton.Add(new RoleAssigButtonViewModel { Id = btnitem.Id, @checked = false, lable = btnitem.Name }); } } } else { //如果不存在将所有的按钮设置为未选择状态 button.ForEach(x => { nButton.Add(new RoleAssigButtonViewModel { Id = x.Id, @checked = false, lable = x.Name }); }); } item.ButtonsList.AddRange(nButton); } #endregion CreateRoleAssigTree(AllroleAssig, item, sysButtonList, sysRoleRights); } }