新增房间管理员角色

This commit is contained in:
youngq 2024-09-14 14:10:28 +08:00
parent d4935029a0
commit aad7f3df40
2 changed files with 12 additions and 11 deletions

View File

@ -63,9 +63,9 @@ namespace WGShare.API.Controllers.Frontend
public async Task SetRoomManager([FromBody] RoomManagerInputDTO inputDTO) public async Task SetRoomManager([FromBody] RoomManagerInputDTO inputDTO)
{ {
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum));
if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString()) >= 32) if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 12)
{ {
throw Oops.Oh("房间已达到20个发言人限制。请移除一位或联系管理员。"); throw Oops.Oh("房间已达到12个发言人限制。请移除一位发言人");
} }
var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId); var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId);
if (user == null) if (user == null)
@ -103,7 +103,7 @@ namespace WGShare.API.Controllers.Frontend
{ {
// 取消显示用户,设置显示管理员 // 取消显示用户,设置显示管理员
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum));
var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager); var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString());
if (showUser != null) if (showUser != null)
{ {
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, showUser.UID); RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, showUser.UID);
@ -397,7 +397,7 @@ namespace WGShare.API.Controllers.Frontend
using (var pipe = RedisHelper.Instance.StartPipe()) using (var pipe = RedisHelper.Instance.StartPipe())
{ {
if (RoleId == RoleEnums.Admin) if (RoleId == RoleEnums.Admin || RoleId == RoleEnums.RoomManager)
{ {
// 管理员进房如果没有全员看ta则设置 // 管理员进房如果没有全员看ta则设置
var script = @"local hashKey = KEYS[1] var script = @"local hashKey = KEYS[1]
@ -421,12 +421,11 @@ namespace WGShare.API.Controllers.Frontend
var results = pipe.EndPipe(); var results = pipe.EndPipe();
// 判断如果有全员看ta则通知 // 判断如果有全员看ta则通知
if (RoleId == RoleEnums.Admin && !results.IsNullOrEmpty() && results[0].ObjToInt() == 1) if ((RoleId == RoleEnums.Admin || RoleId == RoleEnums.RoomManager) && !results.IsNullOrEmpty() && results[0].ObjToInt() == 1)
await _hubContext.Clients.Group(roomNum).ShowUser(UId, UserName, UId, UserName); await _hubContext.Clients.Group(roomNum).ShowUser(UId, UserName, string.Empty, string.Empty);
} }
await _hubContext.Groups.AddToGroupAsync(ConnectionId, roomNum); await _hubContext.Groups.AddToGroupAsync(ConnectionId, roomNum);
await _hubContext.Clients.GroupExcept(roomNum, ConnectionId).UserJoined(userInfo); await _hubContext.Clients.GroupExcept(roomNum, ConnectionId).UserJoined(userInfo);
} }
/// <summary> /// <summary>
@ -454,7 +453,7 @@ namespace WGShare.API.Controllers.Frontend
if (!result.IsNullOrEmpty() && result[0].ObjToInt() != -1) if (!result.IsNullOrEmpty() && result[0].ObjToInt() != -1)
{ {
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager); var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString());
if (showUser != null) if (showUser != null)
{ {
// 通知全员看ta // 通知全员看ta
@ -509,7 +508,7 @@ namespace WGShare.API.Controllers.Frontend
var polledUserIdsSet = new HashSet<string>(polledUserIds); var polledUserIdsSet = new HashSet<string>(polledUserIds);
// 排除管理员和发言人 // 排除管理员和发言人
var candidates = channelUserInfos.Where(x => x.RoleId != ((int)RoleEnums.Admin).ToString() && !x.IsRoomManager); var candidates = channelUserInfos.Where(x => x.RoleId != ((int)RoleEnums.Admin).ToString() && !x.IsRoomManager && x.RoleId != ((int)RoleEnums.RoomManager).ToString());
// 使用 HashSet 提高查找效率 // 使用 HashSet 提高查找效率
var userInfos = new List<ChannelUserInfo>(); var userInfos = new List<ChannelUserInfo>();
@ -559,7 +558,7 @@ namespace WGShare.API.Controllers.Frontend
{ {
return; return;
} }
var connectionIds = channelUsers.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString()).Select(x => x.ConnectId); var connectionIds = channelUsers.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()).Select(x => x.ConnectId);
if (connectionIds.Any()) if (connectionIds.Any())
{ {
@ -567,7 +566,7 @@ namespace WGShare.API.Controllers.Frontend
} }
} }
#region #region
/// <summary> /// <summary>
/// 分享上传文件 /// 分享上传文件

View File

@ -17,5 +17,7 @@ namespace WGShare.Domain.Enums
Admin = 1, Admin = 1,
[Description("普通用户")] [Description("普通用户")]
User = 2, User = 2,
[Description("房间管理员")]
RoomManager = 3
} }
} }