protected void RemovePermissionAccess(ResourcePermissionBaseEntry entry) {
if (entry == null)
throw new ArgumentNullException("entry");
if (entry.PermissionAccessPath.Length != this.TagNames.Length)
throw new InvalidOperationException(SR.GetString(SR.PermissionNumberOfElements));
Hashtable currentTable = this.rootTable;
string[] accessPath = entry.PermissionAccessPath;
for (int index = 0; index < accessPath.Length; ++ index) {
if (currentTable == null || !currentTable.ContainsKey(accessPath[index]))
throw new InvalidOperationException(SR.GetString(SR.PermissionItemDoesntExist));
else {
Hashtable oldTable = currentTable;
if (index < accessPath.Length - 1) {
currentTable = (Hashtable)currentTable[accessPath[index]];
if (currentTable.Count == 1)
oldTable.Remove(accessPath[index]);
}
else {
currentTable = null;
oldTable.Remove(accessPath[index]);
}
}
}
}