permission handling

This commit is contained in:
Paul Schneider 2025-02-23 20:23:23 +00:00
commit 71262647b3
27 changed files with 243 additions and 288 deletions

View file

@ -206,7 +206,7 @@ public static class HostingExtensions
services.AddDataProtection().PersistKeysToFileSystem(dataDir);
AddYavscPolicies(services);
services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
services.AddScoped<IAuthorizationHandler, PermissionHandler>();
AddAuthentication(builder);
@ -417,9 +417,8 @@ public static class HostingExtensions
var smtpSettings = services.GetRequiredService<IOptions<SmtpSettings>>();
var payPalSettings = services.GetRequiredService<IOptions<PayPalSettings>>();
var googleAuthSettings = services.GetRequiredService<IOptions<GoogleAuthSettings>>();
var authorizationService = services.GetRequiredService<IAuthorizationService>();
var localization = services.GetRequiredService<IStringLocalizer<YavscLocalization>>();
Startup.Configure(app, siteSettings, smtpSettings, authorizationService,
Startup.Configure(app, siteSettings, smtpSettings,
payPalSettings, googleAuthSettings, localization, loggerFactory,
app.Environment.EnvironmentName);
app.ConfigureFileServerApp();

View file

@ -23,7 +23,11 @@ public class PermissionHandler : IAuthorizationHandler
{
if (requirement is ReadPermission)
{
if (IsOwner(context.User, context.Resource)
if (IsPublic(context.Resource))
{
context.Succeed(requirement);
}
else if (IsOwner(context.User, context.Resource)
|| IsSponsor(context.User, context.Resource))
{
context.Succeed(requirement);
@ -41,6 +45,16 @@ public class PermissionHandler : IAuthorizationHandler
return Task.CompletedTask;
}
private bool IsPublic(object? resource)
{
if (resource is BlogPost blogPost)
{
if (blogPost.ACL.Count==0)
return true;
}
return false;
}
private static bool IsOwner(ClaimsPrincipal user, object? resource)
{
if (resource is BlogPost blogPost)