using System; namespace ln.identities { public class RoleAssignment { IIdentityProvider identityProvider; public IIdentityProvider IdentityProvider => identityProvider; Guid identityUniqueID; Guid effectiveIdentityUniqueID; public Identity Identity => IdentityProvider.GetIdentity(identityUniqueID); // Identity this Role is assigned to public Identity EffectiveIdentity => IdentityProvider.GetIdentity(effectiveIdentityUniqueID); // Identity for that this Role is valid public Role Role { get; } // Role that is assigned private RoleAssignment(IIdentityProvider identityProvider) { this.identityProvider = identityProvider; } public RoleAssignment(IIdentityProvider identityProvider,Identity identity,Identity effectiveIdentity,Role role) :this(identityProvider) { identityUniqueID = identity.UniqueID; effectiveIdentityUniqueID = effectiveIdentity.UniqueID; Role = role; } public override int GetHashCode() { return EffectiveIdentity.GetHashCode() ^ Role.GetHashCode(); } public override bool Equals(object obj) { return (obj is RoleAssignment you) && (identityUniqueID.Equals(you.identityUniqueID) && effectiveIdentityUniqueID.Equals(you.effectiveIdentityUniqueID) && Role.Equals(you.Role)); } public override string ToString() { return string.Format("[RoleAssigment Identity={0} EffectiveIdentity={1} Role={2}]",Identity.IdentityName,EffectiveIdentity.IdentityName,Role); } } }