private Privileges JoinPrivileges(Privileges privilege1, Privileges privilege2) { var newPriv = privilege1.ToDictionary(x => x.Key, x => x.Value.ToDictionary(y => y.Key, y => y.Value)); var intersection = privilege1.Keys.Intersect(privilege2.Keys); foreach (var logicalName in intersection) { var a1 = privilege1[logicalName]; var a2 = privilege2[logicalName]; var aJoined = JoinAccess(a1, a2); newPriv.Remove(logicalName); newPriv.Add(logicalName, aJoined); } foreach (var logicalName in privilege2.Keys.Except(intersection)) { newPriv.Add(logicalName, privilege2[logicalName]); } return(newPriv); }
public SecurityService() { _objectProvidersByKind = new Lazy <ILookup <SecurityObjectKind, ISecurityObjectProvider <TDomain> > >(() => ObjectProviders.ToLookup(o => o.Kind)); _allPrivileges = Lazy.Value(() => Privileges.ToDictionary(p => p.SID)); }