Files
xSaherElmIdentityHelper/XAuthorizationHelper.cs
2026-03-22 14:00:52 +03:30

607 lines
19 KiB
C#

using System.Collections.Generic;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using xCommons.Authorization;
using xCommons.Constants;
using xCommons.Extensions;
using static xIdentityHelper.XApiScopeHelper;
namespace xIdentityHelper
{
public class XAuthorizationHelper
{
public static IDictionary<string, AuthorizationPolicy> GetXAuthorizationPolicies()
{
//
var result = new Dictionary<string, AuthorizationPolicy>();
//
RequiredRolesRequirement roleRequirements = null;
//
#region Build Policies ...
//
// Scope Policies ...
#region Scope Policies ...
//
// Read Scope ...
result.Add(XPolicies.ReadAccess,
new AuthorizationPolicyBuilder()
.RequireClaim(JwtClaimTypes.Scope, XApiScopes.Read)
.Build()
);
//
// Write Scope ...
result.Add(XPolicies.WriteAccess,
new AuthorizationPolicyBuilder()
.RequireClaim(
JwtClaimTypes.Scope,
XApiScopes.Read,
XApiScopes.Write
)
.Build()
);
//
// Admin Scope ...
result.Add(XPolicies.AdminAccess,
new AuthorizationPolicyBuilder()
.RequireClaim(
JwtClaimTypes.Scope,
XApiScopes.Read,
XApiScopes.Write,
XApiScopes.Admin
)
.Build()
);
//
// Manage Scope ...
result.Add(XPolicies.ManageAccess,
new AuthorizationPolicyBuilder()
.RequireClaim(
JwtClaimTypes.Scope,
XApiScopes.Read,
XApiScopes.Write,
XApiScopes.Admin,
XApiScopes.Manage
)
.Build()
);
#endregion
//
// Roles Policies ...
#region Roles Policies ...
//
// User ...
#region User Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.USER,
XUserRoles.AGENT,
XUserRoles.REPORTER_ASSISTANT,
XUserRoles.REPORTER,
XUserRoles.ACTUARY_ASSISTANT,
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// User Policy ...
result.Add(XPolicies.User,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled User Policy ...
result.Add(XPolicies.EnabledUser,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// Agent ...
#region Agent Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.AGENT,
XUserRoles.REPORTER_ASSISTANT,
XUserRoles.REPORTER,
XUserRoles.ACTUARY_ASSISTANT,
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// Agent Policy ...
result.Add(XPolicies.Agent,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled Agent Policy ...
result.Add(XPolicies.EnabledAgent,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// ReporterAssistant ...
#region Reporter Assistant Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.REPORTER_ASSISTANT,
XUserRoles.REPORTER,
XUserRoles.ACTUARY_ASSISTANT,
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// ReporterAssistant ...
result.Add(XPolicies.ReporterAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled ReporterAssistant ...
result.Add(XPolicies.EnabledReporterAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// Reporter ...
#region Reporter Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.REPORTER,
XUserRoles.ACTUARY_ASSISTANT,
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// Reporter ...
result.Add(XPolicies.Reporter,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled Reporter ...
result.Add(XPolicies.EnabledReporter,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// ActuaryAssistant ...
#region Actuary Assistant Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.ACTUARY_ASSISTANT,
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// ActuaryAssistant ...
result.Add(XPolicies.ActuaryAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled ActuaryAssistant ...
result.Add(XPolicies.EnabledActuaryAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// Actuary ...
#region Actuary Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.ACTUARY,
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// Actuary ...
result.Add(XPolicies.Actuary,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled Actuary ...
result.Add(XPolicies.EnabledActuary,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// ChiefClerkAssistant ...
#region Chief Clerk Assistant Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.CHIEF_CLERK_ASSISTANT,
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// ChiefClerkAssistant ...
result.Add(XPolicies.ChiefClerkAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled ChiefClerkAssistant ...
result.Add(XPolicies.EnabledChiefClerkAssistant,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// ChiefClerk ...
#region Chief Clerk Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.CHIEF_CLERK,
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// ChiefClerk ...
result.Add(XPolicies.ChiefClerk,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled ChiefClerk ...
result.Add(XPolicies.EnabledChiefClerk,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// Journalist ...
#region Journalist Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.JOURNALIST,
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// Journalist ...
result.Add(XPolicies.Journalist,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled Journalist ...
result.Add(XPolicies.EnabledJournalist,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// ResponsibleManager ...
#region Responsible Manager Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.RESPONSIBLE_MANAGER,
XUserRoles.ADMIN
);
//
// ResponsibleManager ...
result.Add(XPolicies.ResponsibleManager,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled ResponsibleManager ...
result.Add(XPolicies.EnabledResponsibleManager,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
//
// Admin ...
#region Admin Related Policies ...
//
roleRequirements = new RequiredRolesRequirement(
XUserRoles.ADMIN
);
//
// Admin Policy ...
result.Add(XPolicies.Admin,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.Build()
);
//
// Enabled Admin Policy ...
result.Add(XPolicies.EnabledAdmin,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(roleRequirements)
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
#endregion
//
// Complex Policies ...
#region AdminOrAgent Related Policies ...
//
// Admin Or Agent Policy ...
result.Add(XPolicies.AdminOrAgent,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(new RequiredRolesRequirement(
XUserRoles.ADMIN,
XUserRoles.AGENT
))
.Build()
);
//
// Enabled Admin Or Agent Policy ...
result.Add(XPolicies.EnabledAdminOrAgent,
new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(new RequiredRolesRequirement(
XUserRoles.ADMIN,
XUserRoles.AGENT
))
.RequireClaim(
XCustomClaims.IsBanned,
false.ToString(),
false.ToString()
.ToNormalString()
)
.RequireClaim(
XCustomClaims.IsEnabled,
true.ToString(),
true.ToString()
.ToNormalString()
)
.Build()
);
#endregion
#endregion
//
return result;
}
}
}