52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using HRD.LDAPService.JWT;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.DirectoryServices.AccountManagement;
|
|
using System.Linq;
|
|
|
|
namespace HRD.LDAPService
|
|
{
|
|
public static class LdapExtensions
|
|
{
|
|
public static LdapUser CheckAndAddGroupMembers(this PrincipalContext context, UserPrincipal userPrincipal, LdapUser ldapUser)
|
|
{
|
|
if (context == null || userPrincipal == null || ldapUser == null)
|
|
{
|
|
throw new Exception($"UserPrincipal failed");
|
|
}
|
|
|
|
if (ldapUser.RoleList?.Count == 0)
|
|
{
|
|
ldapUser.RoleList = new List<JwtRole>();
|
|
return ldapUser;
|
|
}
|
|
|
|
try
|
|
{
|
|
List<Principal> userGroupList = userPrincipal.GetGroups().ToList(); // all groups of which the user is a direct member
|
|
List<JwtRole> jwtRoleList = ldapUser.RoleList; //keep all possible Roles of the user
|
|
List<JwtRole> fullRoleList = new List<JwtRole>();
|
|
fullRoleList = fullRoleList.Union(jwtRoleList).ToList(); //add Roles from backend
|
|
fullRoleList = fullRoleList.Union(JwtTokenConfig.JwtRoleList).ToList(); //add Roles from JwtTokenConfig.JwtRoleList
|
|
|
|
ldapUser.RoleList = new List<JwtRole>();
|
|
|
|
if (fullRoleList.Count > 0)
|
|
{
|
|
foreach (JwtRole jwtRole in jwtRoleList)
|
|
{
|
|
if (userGroupList.Exists(userGroup => userGroup.Name == jwtRole.Group))
|
|
{
|
|
ldapUser.AddRole(jwtRole.Role);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
return ldapUser;
|
|
}
|
|
}
|
|
} |