Exemple #1
0
        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));
        }