检验房间是否存在 ,区分匿名用户检验方式

登录token新增匿名字段
新增修改在会昵称
This commit is contained in:
youngq 2024-12-13 11:40:42 +08:00
parent ea382b1aa1
commit 03fba8c5e9
11 changed files with 143 additions and 17 deletions

View File

@ -115,11 +115,11 @@
"DockerConfig": { "DockerConfig": {
"Prot": "5192:5192", "Prot": "5192:5192",
"AspNetCoreEnv": "", "AspNetCoreEnv": "",
"LastEnvName": "marking001", "LastEnvName": "29dev",
"RemoveDaysFromPublished": "10", "RemoveDaysFromPublished": "10",
"WorkDir": "", "WorkDir": "",
"Volume": "", "Volume": "",
"Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Production -e TZ=Asia/Shanghai", "Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Development -e TZ=Asia/Shanghai",
"EnvPairList": [ "EnvPairList": [
{ {
"EnvName": "29dev", "EnvName": "29dev",

View File

@ -94,6 +94,7 @@ namespace WGShare.API.Controllers
btnAutn.Add(new Claim("ssid", user.ScreenShareId)); btnAutn.Add(new Claim("ssid", user.ScreenShareId));
btnAutn.Add(new Claim("year", user.Year.ToString())); btnAutn.Add(new Claim("year", user.Year.ToString()));
btnAutn.Add(new Claim("subject", ((int)user.Subject).ToString())); btnAutn.Add(new Claim("subject", ((int)user.Subject).ToString()));
btnAutn.Add(new Claim("anonymous", user.IsAnonymous ? "1" : "0"));
// 获取已登录的token // 获取已登录的token
var tokens = RedisHelper.Instance.Get<AccessAndRefreshToken>(RedisKeyConstant.Data.GetAccessTokenKey(user.Id)); var tokens = RedisHelper.Instance.Get<AccessAndRefreshToken>(RedisKeyConstant.Data.GetAccessTokenKey(user.Id));
@ -169,6 +170,7 @@ namespace WGShare.API.Controllers
btnAutn.Add(new Claim("ssid", user.ScreenShareId)); btnAutn.Add(new Claim("ssid", user.ScreenShareId));
btnAutn.Add(new Claim("year", user.Year.ToString())); btnAutn.Add(new Claim("year", user.Year.ToString()));
btnAutn.Add(new Claim("subject", ((int)user.Subject).ToString())); btnAutn.Add(new Claim("subject", ((int)user.Subject).ToString()));
btnAutn.Add(new Claim("anonymous", user.IsAnonymous ? "1" : "0"));
var accessToken = _jwtHelper.CreateToken(user.Id, btnAutn); var accessToken = _jwtHelper.CreateToken(user.Id, btnAutn);
var refreshTokenNew = Guid.NewGuid().ToString(); var refreshTokenNew = Guid.NewGuid().ToString();
@ -264,6 +266,7 @@ namespace WGShare.API.Controllers
btnAutn.Add(new Claim("account", user.Account)); btnAutn.Add(new Claim("account", user.Account));
btnAutn.Add(new Claim("uname", loginDTO.NickName)); btnAutn.Add(new Claim("uname", loginDTO.NickName));
btnAutn.Add(new Claim("ssid", user.ScreenShareId)); btnAutn.Add(new Claim("ssid", user.ScreenShareId));
btnAutn.Add(new Claim("anonymous", user.IsAnonymous ? "1" : "0"));
var accessToken = _jwtHelper.CreateToken(user.Id, btnAutn); var accessToken = _jwtHelper.CreateToken(user.Id, btnAutn);
return Ok(new return Ok(new

View File

@ -58,7 +58,7 @@ namespace WGShare.API.Controllers.Basic
{ {
get get
{ {
var roleId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "roleid").Value; var roleId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
if (string.IsNullOrWhiteSpace(roleId) || !int.TryParse(roleId, out int role) || role == 0) if (string.IsNullOrWhiteSpace(roleId) || !int.TryParse(roleId, out int role) || role == 0)
{ {
throw Oops.Oh("用户信息有误,请重新登录"); throw Oops.Oh("用户信息有误,请重新登录");
@ -72,7 +72,7 @@ namespace WGShare.API.Controllers.Basic
{ {
get get
{ {
var tenant = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "tenant").Value; var tenant = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
if (string.IsNullOrWhiteSpace(tenant)) if (string.IsNullOrWhiteSpace(tenant))
{ {
throw Oops.Oh("用户信息有误,请重新登录"); throw Oops.Oh("用户信息有误,请重新登录");
@ -85,7 +85,7 @@ namespace WGShare.API.Controllers.Basic
{ {
get get
{ {
var ssId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ssid").Value; var ssId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value;
if (string.IsNullOrWhiteSpace(ssId)) if (string.IsNullOrWhiteSpace(ssId))
{ {
throw Oops.Oh("用户信息有误,请重新登录"); throw Oops.Oh("用户信息有误,请重新登录");
@ -121,7 +121,7 @@ namespace WGShare.API.Controllers.Basic
return year; return year;
} }
var year_str = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "year").Value; var year_str = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "year")?.Value;
if (string.IsNullOrWhiteSpace(year_str) || !int.TryParse(year_str, out year)) if (string.IsNullOrWhiteSpace(year_str) || !int.TryParse(year_str, out year))
{ {
throw Oops.Oh("用户信息有误,请重新登录"); throw Oops.Oh("用户信息有误,请重新登录");
@ -140,7 +140,7 @@ namespace WGShare.API.Controllers.Basic
return (SubjectType)subject; return (SubjectType)subject;
} }
var subject_str = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "subject").Value; var subject_str = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "subject")?.Value;
if (string.IsNullOrWhiteSpace(subject_str) || !int.TryParse(subject_str, out subject)) if (string.IsNullOrWhiteSpace(subject_str) || !int.TryParse(subject_str, out subject))
{ {
throw Oops.Oh("用户信息有误,请重新登录"); throw Oops.Oh("用户信息有误,请重新登录");
@ -149,5 +149,25 @@ namespace WGShare.API.Controllers.Basic
} }
} }
/// <summary>
/// 匿名用户
/// </summary>
public bool IsAnonymous
{
get
{
if (!HttpContext.User.Identity.IsAuthenticated)
{
return true;
}
var anonymous_str = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "anonymous")?.Value;
if (string.IsNullOrWhiteSpace(anonymous_str) || !int.TryParse(anonymous_str, out int anonymous))
{
return false;
}
return anonymous == 1;
}
}
} }
} }

View File

@ -109,7 +109,9 @@ namespace WGShare.API.Controllers.Frontend
entity.Id = YitIdHelper.NextId().ToString(); entity.Id = YitIdHelper.NextId().ToString();
entity.TenantId = TenantId; entity.TenantId = TenantId;
if (await _sqlSugar.Queryable<Room>().AnyAsync(x => x.RoomNum == inputDTO.RoomNum))
var room = await _sqlSugar.Queryable<Room>().FirstAsync(x => x.RoomNum == inputDTO.RoomNum);
if (room != null)
{ {
throw Oops.Oh("无效会议号,请重新输入"); throw Oops.Oh("无效会议号,请重新输入");
} }
@ -127,7 +129,7 @@ namespace WGShare.API.Controllers.Frontend
{ {
var entity = inputDTO.Adapt<Room>(); var entity = inputDTO.Adapt<Room>();
return await _sqlSugar.Updateable(entity) return await _sqlSugar.Updateable(entity)
.UpdateColumns(x => new { x.Year, x.Subject }) .UpdateColumns(x => new { x.Year, x.Subject, x.RoomName, x.AllowAnonymous })
.ExecuteCommandHasChangeAsync(); .ExecuteCommandHasChangeAsync();
} }

View File

@ -3,6 +3,7 @@ using Hangfire.MemoryStorage.Database;
using Mapster; using Mapster;
using Masuit.Tools; using Masuit.Tools;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@ -63,9 +64,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() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 12) if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 32)
{ {
throw Oops.Oh("房间已达到12个发言人限制。请移除一位发言人"); throw Oops.Oh("房间已达到32个发言人限制。请移除一位发言人");
} }
var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId); var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId);
if (user == null) if (user == null)
@ -192,7 +193,34 @@ namespace WGShare.API.Controllers.Frontend
[HttpGet("checkout"), AllowAnonymous] [HttpGet("checkout"), AllowAnonymous]
public async Task<bool> ExistsRoom([FromQuery] string roomNum) public async Task<bool> ExistsRoom([FromQuery] string roomNum)
{ {
return await _sqlSugar.Queryable<Room>().AnyAsync(x => x.RoomNum == roomNum && x.IsDelete == false); if (IsAnonymous)
{
// 匿名用户
var room = await _sqlSugar.Queryable<Room>().FirstAsync(x => x.RoomNum == roomNum && x.IsDelete == false);
if (room == null)
{
return false;
}
if (!room.AllowAnonymous)
{
throw Oops.Oh("房间不允许匿名用户进入");
}
return true;
}
else
{
// 非匿名用户
var room = await _sqlSugar.Queryable<Room>()
.WhereIF(Year > 0 && RoleId == RoleEnums.User, x => x.Year == Year || x.Year == 0)
.WhereIF(Subject > 0 && RoleId == RoleEnums.User, x => x.Subject == Subject || x.Subject == 0)
.FirstAsync(x => x.RoomNum == roomNum && x.IsDelete == false);
if (room == null)
{
return false;
}
return true;
}
} }
/// <summary> /// <summary>
@ -688,5 +716,21 @@ namespace WGShare.API.Controllers.Frontend
await _sqlSugar.Insertable(entitys).ExecuteCommandAsync(); await _sqlSugar.Insertable(entitys).ExecuteCommandAsync();
} }
/// <summary>
/// 修改昵称
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPut("alter-uname")]
public async Task ModifyNickName([FromBody] UserModifyNickNameDto dto)
{
var user = RedisHelper.Instance.HGet<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, dto.RoomNum), dto.UId.ToString());
user.UserName = dto.NickName;
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, dto.RoomNum), dto.UId.ToString(), user);
await _hubContext.Clients.Group(dto.RoomNum).ModifyNickName(dto.UId, dto.NickName);
}
} }
} }

View File

@ -144,5 +144,13 @@ namespace WGShare.API.Hubs
/// <param name="driversJsonString"></param> /// <param name="driversJsonString"></param>
/// <returns></returns> /// <returns></returns>
Task ShowDriverList(string driversJsonString); Task ShowDriverList(string driversJsonString);
/// <summary>
/// 修改昵称
/// </summary>
/// <param name="UId"></param>
/// <param name="NickName"></param>
/// <returns></returns>
Task ModifyNickName(long UId, string NickName);
} }
} }

View File

@ -68,6 +68,11 @@
<param name="file"></param> <param name="file"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="P:WGShare.API.Controllers.Basic.BasicController.IsAnonymous">
<summary>
匿名用户
</summary>
</member>
<member name="T:WGShare.API.Controllers.Frontend.AgoraCallbackController"> <member name="T:WGShare.API.Controllers.Frontend.AgoraCallbackController">
<summary> <summary>
Agora接口 Agora接口
@ -323,6 +328,13 @@
<param name="list"></param> <param name="list"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.ModifyNickName(WGShare.Domain.DTOs.User.UserModifyNickNameDto)">
<summary>
修改昵称
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.UserController.GetUserList(System.String,System.Nullable{System.Boolean},WGShare.Domain.GeneralModel.PagedBaseDto)"> <member name="M:WGShare.API.Controllers.Frontend.UserController.GetUserList(System.String,System.Nullable{System.Boolean},WGShare.Domain.GeneralModel.PagedBaseDto)">
<summary> <summary>
获取用户列表 获取用户列表
@ -676,6 +688,14 @@
<param name="driversJsonString"></param> <param name="driversJsonString"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WGShare.API.Hubs.IMessageClient.ModifyNickName(System.Int64,System.String)">
<summary>
修改昵称
</summary>
<param name="UId"></param>
<param name="NickName"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean,System.Boolean)"> <member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean,System.Boolean)">
<summary> <summary>
加入频道 加入频道

View File

@ -28,6 +28,7 @@ namespace WGShare.Domain.DTOs.Room
/// 科目 /// 科目
///</summary> ///</summary>
public SubjectType Subject { get; set; } public SubjectType Subject { get; set; }
} }
@ -47,5 +48,10 @@ namespace WGShare.Domain.DTOs.Room
/// 会议室名称 /// 会议室名称
/// </summary> /// </summary>
public string RoomName { get; set; } public string RoomName { get; set; }
/// <summary>
/// 是否允许匿名
/// </summary>
public bool AllowAnonymous { get; set; } = true;
} }
} }

View File

@ -34,5 +34,7 @@ namespace WGShare.Domain.DTOs.Room
/// 科目 /// 科目
///</summary> ///</summary>
public SubjectType Subject { get; set; } public SubjectType Subject { get; set; }
public bool AllowAnonymous { get; set; }
} }
} }

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WGShare.Domain.DTOs.User
{
public class UserModifyNickNameDto
{
public string RoomNum { get; set; }
public string NickName { get; set; }
public long UId { get; set; }
}
}

View File

@ -62,5 +62,11 @@ namespace WGShare.Domain.Entities
///</summary> ///</summary>
[SugarColumn(ColumnName = "subject")] [SugarColumn(ColumnName = "subject")]
public SubjectType Subject { get; set; } public SubjectType Subject { get; set; }
/// <summary>
/// 是否允许匿名
///</summary>
[SugarColumn(ColumnName = "allow_anonymous")]
public bool AllowAnonymous { get; set; } = true;
} }
} }