/// <summary> /// Add rights for the specified object. /// </summary> private void AddObjRights(RightsByObj rightsByObj, int objNum, EntityRights entityRights) { if (!rightsByObj.ContainsKey(objNum)) { rightsByObj.Add(objNum, entityRights); } }
/// <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> /// Initializes the access control. /// </summary> public void Init(BaseDataSet baseDataSet) { if (baseDataSet == null) { throw new ArgumentNullException(nameof(baseDataSet)); } // initialize rights matrix rightsMatrix = new Dictionary <int, RightsByObj>(baseDataSet.RoleTable.ItemCount); // create indexes TableIndex roleRef_childRoleIndex = new TableIndex("ChildRoleID", typeof(RoleRef)); roleRef_childRoleIndex.AddRangeToIndex(baseDataSet.RoleRefTable.Items); TableIndex objRight_roleIndex = new TableIndex("RoleID", typeof(ObjRight)); objRight_roleIndex.AddRangeToIndex(baseDataSet.ObjRightTable.Items); TableIndex obj_parentObjIndex = new TableIndex("ParentObjNum", typeof(Obj)); obj_parentObjIndex.AddRangeToIndex(baseDataSet.ObjTable.Items); // fill rights foreach (Role role in baseDataSet.RoleTable.EnumerateItems()) { int roleID = role.RoleID; RightsByObj rightsByObj = new RightsByObj(); rightsMatrix.Add(roleID, rightsByObj); AddRoleRights(objRight_roleIndex, obj_parentObjIndex, rightsByObj, roleID); foreach (int parentRoleID in EnumerateParentRoleIDs(roleRef_childRoleIndex, roleID)) { AddRoleRights(objRight_roleIndex, obj_parentObjIndex, rightsByObj, parentRoleID); } } }