74 lines
2.3 KiB
C#
74 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace ln.identities
|
|
{
|
|
public abstract class BaseIdentityProvider : IIdentityProvider
|
|
{
|
|
public BaseIdentityProvider()
|
|
{
|
|
}
|
|
|
|
public virtual Identity Authenticate(AuthenticationProve authenticationProve)
|
|
{
|
|
Identity identity = GetIdentity(authenticationProve.IdentityName);
|
|
if (identity == null)
|
|
throw new KeyNotFoundException();
|
|
|
|
SecureAttribute secureAttribute = identity.GetSecureAttribute(authenticationProve.SecureAttributeUniqueID);
|
|
if (secureAttribute.Authenticate(authenticationProve.Challenge, authenticationProve.Prove))
|
|
{
|
|
return identity;
|
|
}
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
|
|
public abstract Identity CreateIdentity(string identityName);
|
|
public abstract IEnumerable<KeyValuePair<Guid, string>> GetIdentities();
|
|
public abstract Identity GetIdentity(Guid uniqueID);
|
|
public abstract bool Save(Identity identity);
|
|
|
|
public virtual Identity GetIdentity(string identityName) => GetIdentity(GetIdentities().FirstOrDefault((kvp) => identityName.Equals(kvp.Value)).Key);
|
|
|
|
public abstract IEnumerable<RoleAssignment> GetRoleAssignments(Identity identity);
|
|
|
|
public virtual AssignedRoles GetAssignedRoles(Identity identity)
|
|
{
|
|
AssignedRoles assignedRoles = new AssignedRoles(this);
|
|
GetAssignedRoles(identity, assignedRoles);
|
|
return assignedRoles;
|
|
}
|
|
|
|
public virtual void GetAssignedRoles(Identity identity,AssignedRoles assignedRoles)
|
|
{
|
|
assignedRoles[identity].Role |= Role.BE;
|
|
|
|
foreach (RoleAssignment roleAssignment in identity.RoleAssignments)
|
|
{
|
|
foreach (AssignedRole foreignRole in roleAssignment.EffectiveIdentity.AssignedRoles)
|
|
{
|
|
if (roleAssignment.Role.HasFlag(Role.IMPERSONATE) || foreignRole.Identity.Equals(roleAssignment.EffectiveIdentity))
|
|
{
|
|
AssignedRole currentRole = assignedRoles[foreignRole.Identity];
|
|
currentRole.Role |= (foreignRole.Role & roleAssignment.Role);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|