internal virtual void MergeDeniedSet(TokenBasedSet denied)
{
if (denied == null)
{
return;
}
int minMaxIndex;
if (this.m_maxIndex < denied.m_maxIndex)
{
minMaxIndex = this.m_maxIndex;
for (int i = this.m_maxIndex + 1; i <= denied.m_maxIndex; ++i)
{
denied.RemoveItem(i);
}
}
else
{
minMaxIndex = denied.m_maxIndex;
}
IPermission p1;
IPermission p2;
for (int i = 0; i <= minMaxIndex; i++)
{
p1 = (IPermission)this.GetItem(i);
p2 = (IPermission)denied.GetItem(i);
if (p1 != null)
{
if (p2 != null && p1.IsSubsetOf(p2))
{
// If the permission appears in both sets, we can remove it from both
// (i.e. now it's not granted instead of being denied)
this.RemoveItem(i);
denied.RemoveItem(i);
}
}
else if (p2 != null)
{
// If we tried to deny it and it wasn't granted, just remove it from the denied set.
denied.RemoveItem(i);
}
}
}