namespace ROLAC.API.Authorization; /// /// Canonical list of permission-controlled modules. The names are stored verbatim /// in and used in [HasPermission] /// attributes, so changing a string here is a breaking change requiring a data update. /// public static class Modules { public const string Members = "Members"; public const string Users = "Users"; public const string Givings = "Givings"; public const string GivingCategories = "GivingCategories"; public const string Expenses = "Expenses"; public const string ExpenseCategories = "ExpenseCategories"; public const string OfferingSessions = "OfferingSessions"; public const string Ministries = "Ministries"; public const string FinanceDashboard = "FinanceDashboard"; public const string MonthlyStatements = "MonthlyStatements"; public const string ChurchProfile = "ChurchProfile"; public const string Disbursements = "Disbursements"; public const string MealAttendance = "MealAttendance"; public const string Permissions = "Permissions"; /// All modules, in display order — drives the admin matrix UI. public static readonly IReadOnlyList All = [ Members, Users, Givings, GivingCategories, Expenses, ExpenseCategories, OfferingSessions, Ministries, FinanceDashboard, MonthlyStatements, ChurchProfile, Disbursements, MealAttendance, Permissions, ]; public static bool IsValid(string module) => All.Contains(module); } /// /// The four actions a role can be granted on a module. The default HTTP-verb mapping /// is GET→Read, POST/PUT/PATCH→Write, DELETE→Delete; "Approve" is applied explicitly /// to state-transition endpoints (approve / finalize / issue / sign, etc.). /// public static class PermissionActions { public const string Read = "Read"; public const string Write = "Write"; public const string Delete = "Delete"; public const string Approve = "Approve"; public static readonly IReadOnlyList All = [Read, Write, Delete, Approve]; public static bool IsValid(string action) => All.Contains(action); }