コード例 #1
0
ファイル: ObjSecurity.cs プロジェクト: newbienewbie/scada-v6
        /// <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);
                }
            }
        }