BotSharp/src/Infrastructure/BotSharp.Abstraction/Users/Models/UserAuthorization.cs
2024-11-21 10:31:24 -06:00

47 lines
1.4 KiB
C#

namespace BotSharp.Abstraction.Users.Models;
public class UserAuthorization
{
public bool IsAdmin { get; set; }
public IEnumerable<string> Permissions { get; set; } = [];
public IEnumerable<UserAgent> AgentActions { get; set; } = [];
}
public static class UserAuthorizationExtension
{
public static bool IsAgentActionAllowed(this UserAuthorization auth, string agentId, string targetAction)
{
if (auth == null || string.IsNullOrEmpty(agentId)) return false;
if (auth.IsAdmin) return true;
var found = auth.AgentActions.FirstOrDefault(x => x.AgentId == agentId);
if (found == null) return false;
var actions = found.Actions ?? [];
return actions.Any(x => x == targetAction);
}
/// <summary>
/// Get allowed user actions on the agent. If user is admin, returns null;
/// </summary>
/// <param name="auth"></param>
/// <param name="agentId"></param>
/// <returns></returns>
public static IEnumerable<string>? GetAllowedAgentActions(this UserAuthorization auth, string agentId)
{
if (auth == null || string.IsNullOrEmpty(agentId))
{
return [];
}
if (auth.IsAdmin)
{
return null;
}
var found = auth.AgentActions.FirstOrDefault(x => x.AgentId == agentId);
return found?.Actions ?? [];
}
}