public virtual async Task <BaseResponseModel> ModifyRoleMenuAsync(ModifyRoleMenuParam roleMenuParam, UserCacheBo currentUser) { var result = new ResponseModel <string>(); var checkResult = await RoleIdCheckAsync(roleMenuParam.RoleId, currentUser); if (!checkResult.IsNullOrEmpty()) { return(result.Fail(checkResult)); } var currentUserMenus = await MenuBll.GetCurrentMenuAsync(currentUser); var currentMenuIds = currentUserMenus.Select(c => c.MenuId).ToList(); //检查提交的按钮是否存在当前用户管理菜单数据中,只操作存在部分 即交集 var crossMenuIds = roleMenuParam.MenuIds.Intersect(currentMenuIds).ToList(); // 这里不是做的全量操作,而且新增部分做插入 数据库中的不在提交数据中的部分做删除 提交的和数据库相交叉的部分不做变动 var dbMenuIds = await SysMenuDao.LoadEntities <SysRoleMenuRelation>(c => c.RoleId == roleMenuParam.RoleId && c.TenantId == currentUser.TenantId).Select(c => c.MenuId).ToListAsync(); var dIds = dbMenuIds.Except(crossMenuIds).ToList(); //需要删除的权限 var iIds = crossMenuIds.Except(dbMenuIds).ToList(); //需要插入的新权限 var db = SysRoleDao.CurrentDbContext; if (dIds.Count > 0) { await db.SysRoleMenuRelations.Where(c => dIds.Contains(c.MenuId) && c.RoleId == roleMenuParam.RoleId).DeleteAsync(); } if (iIds.Count > 0) { var roleMenuRelations = iIds.Select(iId => new SysRoleMenuRelation() { TenantId = currentUser.TenantId, CreatedBy = currentUser.UserId, CreatedTime = DateTime.Now, MenuId = iId, State = 1, Deleted = false, RoleId = roleMenuParam.RoleId, UpdatedBy = 0, UpdatedTime = DateTime.Now, }).ToList(); await db.SysRoleMenuRelations.AddRangeAsync(roleMenuRelations); } await db.SaveChangesAsync(); return(result.Succeed("修改成功")); }
public async Task <ActionResult> ModifyRoleMenu(ModifyRoleMenuParam roleMenuParam) { var result = await RoleBll.ModifyRoleMenuAsync(roleMenuParam, CurrentUser); return(MyJson(result)); }