Add OIDC fixes, add prefered_username, add application-user claims
This commit is contained in:
69
app/helpers/claims_helper.rb
Normal file
69
app/helpers/claims_helper.rb
Normal file
@@ -0,0 +1,69 @@
|
||||
module ClaimsHelper
|
||||
include ClaimsMerger
|
||||
|
||||
# Preview final merged claims for a user accessing an application
|
||||
def preview_user_claims(user, application)
|
||||
claims = {
|
||||
# Standard OIDC claims
|
||||
email: user.email_address,
|
||||
email_verified: true,
|
||||
preferred_username: user.username.presence || user.email_address,
|
||||
name: user.name.presence || user.email_address
|
||||
}
|
||||
|
||||
# Add groups
|
||||
if user.groups.any?
|
||||
claims[:groups] = user.groups.pluck(:name)
|
||||
end
|
||||
|
||||
# Merge group custom claims (arrays are combined, not overwritten)
|
||||
user.groups.each do |group|
|
||||
claims = deep_merge_claims(claims, group.parsed_custom_claims)
|
||||
end
|
||||
|
||||
# Merge user custom claims (arrays are combined, other values override)
|
||||
claims = deep_merge_claims(claims, user.parsed_custom_claims)
|
||||
|
||||
# Merge app-specific claims (arrays are combined)
|
||||
claims = deep_merge_claims(claims, application.custom_claims_for_user(user))
|
||||
|
||||
claims
|
||||
end
|
||||
|
||||
# Get claim sources breakdown for display
|
||||
def claim_sources(user, application)
|
||||
sources = []
|
||||
|
||||
# Group claims
|
||||
user.groups.each do |group|
|
||||
if group.parsed_custom_claims.any?
|
||||
sources << {
|
||||
type: :group,
|
||||
name: group.name,
|
||||
claims: group.parsed_custom_claims
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
# User claims
|
||||
if user.parsed_custom_claims.any?
|
||||
sources << {
|
||||
type: :user,
|
||||
name: "User Override",
|
||||
claims: user.parsed_custom_claims
|
||||
}
|
||||
end
|
||||
|
||||
# App-specific claims
|
||||
app_claims = application.custom_claims_for_user(user)
|
||||
if app_claims.any?
|
||||
sources << {
|
||||
type: :application,
|
||||
name: "App-Specific (#{application.name})",
|
||||
claims: app_claims
|
||||
}
|
||||
end
|
||||
|
||||
sources
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user