/// <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); } } }