feat: User-Zuordnung für Sessions und Agents
- UserId-Feld zu SessionRecord und AgentRecord hinzugefügt - DB-Migration: user_id Spalte + bestehende Daten dem Admin zuweisen - Alle Endpoints filtern/prüfen nach UserId des eingeloggten Users - HttpContextExtensions.GetUserId() Helper für konsistenten Zugriff - Betrifft: Agent, Session, Chat, History, Workspace, Skill Endpoints - Sessions/Agents anderer User sind nicht sichtbar/zugreifbar
This commit is contained in:
1 parent
9a59ae686d
commit
7614141760
10 files changed
+123
-45
No files matched your search
@@ -4,6 +4,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using Gott.Extensions;
|
||||
using Gott.Services;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
@@ -50,10 +51,17 @@ public static class SkillEndpoint
|
||||
await ctx.Response.WriteAsJsonAsync(skills);
|
||||
}
|
||||
|
||||
private static async Task<bool> VerifyAgentOwner(HttpContext ctx, DatabaseService db, string agentId)
|
||||
{
|
||||
if (string.IsNullOrEmpty(agentId)) return false;
|
||||
var agent = await db.GetAgent(agentId);
|
||||
return agent != null && agent.UserId == ctx.GetUserId();
|
||||
}
|
||||
|
||||
private static async Task HandleGetAgentSkills(HttpContext ctx, DatabaseService db, SkillService skillService)
|
||||
{
|
||||
var agentId = ctx.Request.RouteValues["agentId"]?.ToString();
|
||||
if (string.IsNullOrEmpty(agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
if (string.IsNullOrEmpty(agentId) || !await VerifyAgentOwner(ctx, db, agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
|
||||
var slugs = await db.GetAgentSkills(agentId);
|
||||
var allSkills = skillService.GetAllSkills();
|
||||
@@ -69,7 +77,7 @@ public static class SkillEndpoint
|
||||
private static async Task HandleSetAgentSkills(HttpContext ctx, DatabaseService db)
|
||||
{
|
||||
var agentId = ctx.Request.RouteValues["agentId"]?.ToString();
|
||||
if (string.IsNullOrEmpty(agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
if (string.IsNullOrEmpty(agentId) || !await VerifyAgentOwner(ctx, db, agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
|
||||
var body = await JsonSerializer.DeserializeAsync<JsonElement>(ctx.Request.Body);
|
||||
var slugs = body.TryGetProperty("skills", out var arr)
|
||||
@@ -86,7 +94,7 @@ public static class SkillEndpoint
|
||||
{
|
||||
var agentId = ctx.Request.RouteValues["agentId"]?.ToString();
|
||||
var slug = ctx.Request.RouteValues["slug"]?.ToString();
|
||||
if (string.IsNullOrEmpty(agentId) || string.IsNullOrEmpty(slug)) { ctx.Response.StatusCode = 400; return; }
|
||||
if (string.IsNullOrEmpty(agentId) || string.IsNullOrEmpty(slug) || !await VerifyAgentOwner(ctx, db, agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
|
||||
await db.AddAgentSkill(agentId, slug);
|
||||
ctx.Response.StatusCode = 204;
|
||||
@@ -96,7 +104,7 @@ public static class SkillEndpoint
|
||||
{
|
||||
var agentId = ctx.Request.RouteValues["agentId"]?.ToString();
|
||||
var slug = ctx.Request.RouteValues["slug"]?.ToString();
|
||||
if (string.IsNullOrEmpty(agentId) || string.IsNullOrEmpty(slug)) { ctx.Response.StatusCode = 400; return; }
|
||||
if (string.IsNullOrEmpty(agentId) || string.IsNullOrEmpty(slug) || !await VerifyAgentOwner(ctx, db, agentId)) { ctx.Response.StatusCode = 400; return; }
|
||||
|
||||
await db.RemoveAgentSkill(agentId, slug);
|
||||
ctx.Response.StatusCode = 204;
|
||||
|
||||
Reference in new issue
Block a user