public async Task <string> AddRole(RoleViewModel model) { using (var trans = await _systemIdentityDbContext.Database.BeginTransactionAsync()) { try { var role = _mapper.Map <SystemRole>(model); var isSuccess = await _roleRepository.AddRole(role); if (!isSuccess) { return("无法创建角色,请检查角色名是否相同!"); } // 找到所有父和子节点 var menuIdArray = model.Menus.Split(',', StringSplitOptions.RemoveEmptyEntries); var menuTree = from tree in _menuTreeRepository.Get(false) where menuIdArray.Contains(tree.Ancestor.ToString()) || menuIdArray.Contains(tree.Descendant.ToString()) select tree; var menuIds = menuTree.Select(tree => tree.Descendant).Concat( menuTree.Select(tree => tree.Ancestor)).Distinct(); role = await _roleRepository.GetRole(model.Name); isSuccess = await _roleRepository.AddOrUpdateRoleClaim(role, CustomClaimTypes.RoleMenus, string.Join(',', menuIds.Distinct())); if (!isSuccess) { await trans.RollbackAsync(); return("无法创建角色,菜单权限添加失败!"); } // 存储原始选中节点前端用 isSuccess = await _roleRepository.AddOrUpdateRoleClaim(role, CustomClaimTypes.RoleMenusFront, string.Join(',', menuIdArray.Distinct())); if (!isSuccess) { await trans.RollbackAsync(); return("无法更新角色,菜单权限添加失败!"); } await trans.CommitAsync(); } catch (Exception e) { await trans.RollbackAsync(); throw e; } } return(string.Empty); }