add user role limit

This commit is contained in:
Jicheng Lu 2024-05-15 17:30:45 -05:00
parent 66e233a11c
commit 394d607163
8 changed files with 41 additions and 20 deletions

View file

@ -48,5 +48,7 @@ public interface IAgentService
string GetDataDir();
string GetAgentDataDir(string agentId);
List<Agent> GetAgentsByUser(string userId);
PluginDef GetPlugin(string agentId);
}

View file

@ -1,5 +1,6 @@
using BotSharp.Abstraction.Repositories.Enums;
using BotSharp.Abstraction.Routing.Models;
using BotSharp.Abstraction.Users.Enums;
using System.IO;
namespace BotSharp.Core.Agents.Services;
@ -8,6 +9,10 @@ public partial class AgentService
{
public async Task UpdateAgent(Agent agent, AgentField updateField)
{
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user?.Role != UserRole.Admin) return;
if (agent == null || string.IsNullOrEmpty(agent.Id)) return;
var record = _db.GetAgent(agent.Id);

View file

@ -47,4 +47,10 @@ public partial class AgentService : IAgentService
}
return dir;
}
public List<Agent> GetAgentsByUser(string userId)
{
var agents = _db.GetAgentsByUser(userId);
return agents;
}
}

View file

@ -25,7 +25,6 @@ public partial class FileRepository
{
var userId = Guid.NewGuid().ToString();
user.Id = userId;
user.Role = UserRole.Admin;
var dir = Path.Combine(_dbSettings.FileRepository, "users", userId);
if (!Directory.Exists(dir))
{

View file

@ -1,4 +1,3 @@
using BotSharp.Abstraction.Repositories;
using BotSharp.Abstraction.Users.Models;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;

View file

@ -50,17 +50,16 @@ public class AgentController : ControllerBase
rule.RedirectToAgentName = found.Name;
}
var editable = false;
var editable = true;
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user != null && user.Role != UserRole.Admin)
if (user?.Role != UserRole.Admin)
{
var db = _services.GetRequiredService<IBotSharpRepository>();
var userAgents = db.GetAgentsByUser(user.Id);
var userAgents = _agentService.GetAgentsByUser(user?.Id);
editable = userAgents?.Select(x => x.Id)?.Contains(targetAgent.Id) ?? false;
}
targetAgent.Editable = editable || user?.Role == UserRole.Admin;
targetAgent.Editable = editable;
return targetAgent;
}

View file

@ -50,9 +50,7 @@ public class ConversationController : ControllerBase
filter.UserId = user.Role != UserRole.Admin ? user.Id : null;
var conversations = await convService.GetConversations(filter);
var agentService = _services.GetRequiredService<IAgentService>();
var list = conversations.Items
.Select(x => ConversationViewModel.FromSession(x))
.ToList();
var list = conversations.Items.Select(x => ConversationViewModel.FromSession(x)).ToList();
foreach (var item in list)
{

View file

@ -1,4 +1,5 @@
using BotSharp.Abstraction.Plugins.Models;
using BotSharp.Abstraction.Users.Enums;
using BotSharp.Core.Plugins;
namespace BotSharp.OpenAPI.Controllers;
@ -8,38 +9,50 @@ namespace BotSharp.OpenAPI.Controllers;
public class PluginController : ControllerBase
{
private readonly IServiceProvider _services;
private readonly IUserIdentity _user;
private readonly PluginSettings _settings;
public PluginController(IServiceProvider services, PluginSettings settings)
public PluginController(IServiceProvider services, IUserIdentity user, PluginSettings settings)
{
_services = services;
_user = user;
_settings = settings;
}
[HttpGet("/plugins")]
public PagedItems<PluginDef> GetPlugins([FromQuery] PluginFilter filter)
public async Task<PagedItems<PluginDef>> GetPlugins([FromQuery] PluginFilter filter)
{
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user?.Role != UserRole.Admin)
{
return new PagedItems<PluginDef>();
}
var loader = _services.GetRequiredService<PluginLoader>();
return loader.GetPagedPlugins(_services, filter);
}
[HttpGet("/plugin/menu")]
public List<PluginMenuDef> GetPluginMenu()
public async Task<List<PluginMenuDef>> GetPluginMenu()
{
var menu = new List<PluginMenuDef>
{
new PluginMenuDef("Apps", weight: 5)
{
IsHeader = true,
},
new PluginMenuDef("System", weight: 30)
{
IsHeader = true
},
new PluginMenuDef("Plugins", link: "page/plugin", icon: "bx bx-plug", weight: 31),
new PluginMenuDef("Settings", link: "page/setting", icon: "bx bx-cog", weight: 32),
}
};
var userService = _services.GetRequiredService<IUserService>();
var user = await userService.GetUser(_user.Id);
if (user?.Role == UserRole.Admin)
{
menu.Add(new PluginMenuDef("System", weight: 30) { IsHeader = true });
menu.Add(new PluginMenuDef("Plugins", link: "page/plugin", icon: "bx bx-plug", weight: 31));
menu.Add(new PluginMenuDef("Settings", link: "page/setting", icon: "bx bx-cog", weight: 32));
}
var loader = _services.GetRequiredService<PluginLoader>();
foreach (var plugin in loader.GetPlugins(_services))
{