Forked from mesuttalebi/CustomClaimsPrincipalFactory.cs
Created
March 31, 2020 17:38
-
-
Save serefarikan/24427557773be270051d47e9de97ad40 to your computer and use it in GitHub Desktop.
CustomClaimsPrincipalFactory
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// <copyright file="CustomClaimsPrincipalFactory.cs" company=""> | |
// Copyright (c) | |
// </copyright> | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Security.Claims; | |
using System.Threading.Tasks; | |
using Platform.Business.Interfaces; | |
using Platform.Domain.Entities; | |
using Microsoft.AspNetCore.Identity; | |
using Microsoft.Extensions.Options; | |
using IdentityRole = Platform.Domain.Entities.IdentityRole; | |
namespace Platform.Business.Authorization | |
{ | |
public class CustomClaimsPrincipalFactory | |
: UserClaimsPrincipalFactory<ApplicationUser, IdentityRole> | |
{ | |
private readonly IUserService _userService; | |
public CustomClaimsPrincipalFactory(IUserService userService, | |
UserManager<ApplicationUser> userManager, | |
RoleManager<IdentityRole> roleManager, IOptions<IdentityOptions> options) : base(userManager, roleManager, options) | |
{ | |
_userService = userService; | |
} | |
public override async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user) | |
{ | |
var principal = await base.CreateAsync(user); | |
var userRoles = ((ClaimsIdentity)principal.Identity).Claims | |
.Where(c => c.Type == ClaimTypes.Role) | |
.Select(c => c.Value).ToList(); | |
// add Custom claims here | |
var allowedIpAddresses = _userService.GetAllowedIpAddresses(user.Id, userRoles); | |
var ipClaims = new List<Claim>(); | |
foreach (var ipAddress in allowedIpAddresses) | |
{ | |
ipClaims.Add(new Claim(Constants.Authorization.ClaimTypes.IpAddress, ipAddress)); | |
} | |
((ClaimsIdentity) principal.Identity).AddClaims(ipClaims); | |
return principal; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment