Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/SnackFlow.Api/Attributes/RequirePermissionAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

namespace SnackFlow.Api.Attributes;

/// <summary>
/// Atributo personalizado para autorização baseada em permissões.
/// IMPORTANTE: Herda de AuthorizeAttribute para que o ASP.NET reconheça como atributo de autorização.
/// </summary>
/// <remarks>
/// Fluxo: [RequirePermission] → Formata Policy → PermissionPolicyProvider → PermissionAuthorizationHandler → Autoriza/Nega
/// </remarks>
public sealed class RequirePermissionAttribute : AuthorizeAttribute
{
public RequirePermissionAttribute(params string[] permissions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@

namespace SnackFlow.Api.Authorizations.Permissions;

/// <summary>
/// Provider responsável por criar políticas de autorização dinamicamente baseadas em permissões.
/// Intercepta policies no formato "RequirePermissions:perm1,perm2" e cria automaticamente.
/// </summary>
/// <remarks>
/// Evita ter que registrar manualmente cada combinação de permissões no Program.cs.
/// Para policies que não seguem o padrão, delega para o DefaultAuthorizationPolicyProvider.
/// </remarks>
/// <param name="options">Opções de autorização do ASP.NET Core</param>
public sealed class PermissionPolicyProvider(IOptions<AuthorizationOptions> options)
: IAuthorizationPolicyProvider
{
Expand Down
7 changes: 5 additions & 2 deletions src/SnackFlow.Application/DependencyInjection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ public static void AddApplication(this IServiceCollection services)
typeof(LoggingBehavior<,>),
];
});

services.AddValidatorsFromAssembly(typeof(DependencyInjection).Assembly);

services.AddValidatorsFromAssembly(
typeof(DependencyInjection).Assembly,
includeInternalTypes: true
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ public CreateUserCommandValidator()

RuleFor(x => x.Position)
.NotNull()
.WithMessage("O cargo deve ser preenchido.");
.WithMessage("O cargo deve ser preenchido.")
.IsInEnum()
.WithMessage("O cargo informado não é válido.");

When(x => x.CompanyId.HasValue, () =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,6 @@ public partial class AddQuartzTables : Migration
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"
DO $$
DECLARE DropDb INT := 1; -- Set this to 0 to skip DROP statements, 1 to include them
BEGIN
IF DropDb = 1 THEN
SET client_min_messages = WARNING;
DROP TABLE IF EXISTS qrtz_fired_triggers;
DROP TABLE IF EXISTS qrtz_paused_trigger_grps;
DROP TABLE IF EXISTS qrtz_scheduler_state;
DROP TABLE IF EXISTS qrtz_locks;
DROP TABLE IF EXISTS qrtz_simprop_triggers;
DROP TABLE IF EXISTS qrtz_simple_triggers;
DROP TABLE IF EXISTS qrtz_cron_triggers;
DROP TABLE IF EXISTS qrtz_blob_triggers;
DROP TABLE IF EXISTS qrtz_triggers;
DROP TABLE IF EXISTS qrtz_job_details;
DROP TABLE IF EXISTS qrtz_calendars;
SET client_min_messages = NOTICE;
END IF;
END $$;

CREATE TABLE qrtz_job_details
(
sched_name TEXT NOT NULL,
Expand Down Expand Up @@ -197,7 +177,27 @@ PRIMARY KEY (sched_name, lock_name)
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{

migrationBuilder.Sql(@"
DO $$
DECLARE DropDb INT := 1; -- Set this to 0 to skip DROP statements, 1 to include them
BEGIN
IF DropDb = 1 THEN
SET client_min_messages = WARNING;
DROP TABLE IF EXISTS qrtz_fired_triggers;
DROP TABLE IF EXISTS qrtz_paused_trigger_grps;
DROP TABLE IF EXISTS qrtz_scheduler_state;
DROP TABLE IF EXISTS qrtz_locks;
DROP TABLE IF EXISTS qrtz_simprop_triggers;
DROP TABLE IF EXISTS qrtz_simple_triggers;
DROP TABLE IF EXISTS qrtz_cron_triggers;
DROP TABLE IF EXISTS qrtz_blob_triggers;
DROP TABLE IF EXISTS qrtz_triggers;
DROP TABLE IF EXISTS qrtz_job_details;
DROP TABLE IF EXISTS qrtz_calendars;
SET client_min_messages = NOTICE;
END IF;
END $$;
");
}
}
}