/// <summary> /// Enumerates parent role IDs recursively. /// </summary> private IEnumerable <int> EnumerateParentRoleIDs(TableIndex roleRef_childRoleIndex, int childRoleID, HashSet <int> protectionSet = null) { if (protectionSet == null) { protectionSet = new HashSet <int> { childRoleID } } ; foreach (int parentRoleID in roleRef_childRoleIndex.SelectItems(childRoleID)) { if (protectionSet.Add(parentRoleID)) { yield return(parentRoleID); foreach (int grandparentRoleID in EnumerateParentRoleIDs(roleRef_childRoleIndex, parentRoleID, protectionSet)) { yield return(grandparentRoleID); } } } }
/// <summary> /// Add rights for the specified role. /// </summary> private void AddRoleRights(TableIndex objRight_roleIndex, TableIndex obj_parentObjIndex, RightsByObj rightsByObj, int roleID) { // explicitly defined rights have higher priority foreach (ObjRight objRight in objRight_roleIndex.SelectItems(roleID)) { AddObjRights(rightsByObj, objRight.ObjNum, new EntityRights(objRight)); } // add rights on child objects foreach (ObjRight objRight in objRight_roleIndex.SelectItems(roleID)) { EntityRights entityRights = new EntityRights(objRight); foreach (Obj childObj in EnumerateChildObjects(obj_parentObjIndex, objRight.ObjNum)) { AddObjRights(rightsByObj, childObj.ObjNum, entityRights); } } }
/// <summary> /// Enumerates child objects recursively. /// </summary> private IEnumerable <Obj> EnumerateChildObjects(TableIndex obj_parentObjIndex, int parentObjNum, HashSet <int> protectionSet = null) { if (protectionSet == null) { protectionSet = new HashSet <int> { parentObjNum } } ; foreach (Obj childObj in obj_parentObjIndex.SelectItems(parentObjNum)) { if (protectionSet.Add(childObj.ObjNum)) { yield return(childObj); foreach (Obj grandchildObj in EnumerateChildObjects(obj_parentObjIndex, childObj.ObjNum)) { yield return(grandchildObj); } } } }