/// <summary> /// 修改菜单 /// </summary> /// <param name="currentUser"></param> /// <param name="incrementMenu"></param> /// <returns></returns> public async Task <BaseResponseModel> UpdateMenuAsync(UserCacheBo currentUser, IncrementMenuParam incrementMenu) { var responseModel = new ResponseModel <bool>(); var count = await SysMenuDao.UpdateMenuAsync(currentUser, incrementMenu); return(count ? responseModel.Succeed(true) : responseModel.Fail(ResponseCode.Fail, "修改失败")); }
/// <summary> /// 获取当前角色能访问的按钮 /// </summary> /// <param name="roleId"></param> /// <param name="currentUser"></param> /// <returns></returns> public async Task <BaseResponseModel> GetRoleMenuAsync(long roleId, UserCacheBo currentUser) { var menus = await SysMenuDao.GetMenusAsync(roleId, currentUser.TenantId); var result = MenuBll.GetMenuList(menus); return(new ResponseModel().Succeed(result)); }
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("修改成功")); }
/// <summary> /// 获取当前用户的原始权限 并设置缓存 /// </summary> /// <param name="currentUser"></param> /// <returns></returns> public async Task <List <MenuCacheBo> > GetCurrentMenuAsync(UserCacheBo currentUser) { var menuKey = $"{CacheKeys.MENU_TREE}{currentUser.UserId}"; var cacheMenus = await GetMenuTreeCacheAsync(menuKey); if (cacheMenus != null) { return(cacheMenus); } //从数据库中获取菜单树 由于菜单不经常变化故设置redis存储7天 本地缓存设置1天 var roleIds = currentUser.RoleCacheBos.Select(c => c.RoleId).ToList(); cacheMenus = await SysMenuDao.GetMenusAsync(roleIds, currentUser.TenantId); await RedisClient.SetAsync(menuKey, cacheMenus, new TimeSpan(7, 0, 0, 0)); Cache.Set(menuKey, cacheMenus, new TimeSpan(1, 0, 0, 0)); return(cacheMenus); }
public virtual async Task <BaseResponseModel> AddMenuAsync(UserCacheBo currentUser, IncrementMenuParam incrementMenu) { var responseModel = new ResponseModel <bool>(); var sysMenu = incrementMenu.MapTo <SysMenu>(); sysMenu.CreatedTime = DateTime.Now; sysMenu.CreatedBy = currentUser.UserId; sysMenu.UpdatedBy = currentUser.UserId; var relations = new List <SysRoleMenuRelation>(); // 循环取出租户主体信息角色 增加新权限关系 默认为删除状态 点击分配给使用 var db = SysMenuDao.CurrentDbContext; var roleIdsQueryable = db.SysUserRoleRelations.Where(c => !c.Deleted && c.State == 1 && c.TenantId > 1 && c.CreatedBy == 0).Select(c => new RoleCacheBo { RoleId = c.RoleId, TenantId = c.TenantId }); for (int i = 1; i < 100000; i++) { var roleIds = SysMenuDao.LoadPageEntities(roleIdsQueryable, i, 100, true, roleId => roleId.RoleId); if (roleIds.PageData.Count > 0) { roleIds.PageData.ForEach(roleInfo => { relations.Add(new SysRoleMenuRelation() { TenantId = roleInfo.TenantId, MenuId = sysMenu.MenuId, RoleId = roleInfo.RoleId, Deleted = true, //默认不分配给超级管理员看 需单独分配 CreatedTime = DateTime.Now, CreatedBy = 0, //系统创建的都设置为0 State = 1, }); }); } else { break; } } relations.Add(new SysRoleMenuRelation() { TenantId = 1, //系统租户ID MenuId = sysMenu.MenuId, RoleId = 1, //系统角色ID Deleted = false, //系统管理员使用 CreatedTime = DateTime.Now, CreatedBy = 0, //系统创建的都设置为0 State = 1, }); await db.SysRoleMenuRelations.AddRangeAsync(relations); await SysMenuDao.AddAsync(sysMenu); var count = await SysMenuDao.SaveChangesAsync(); return(count > 0 ? responseModel.Succeed(true) : responseModel.Fail(ResponseCode.Fail, "保存失败")); }