Ejemplo n.º 1
0
 /// <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);
     }
 }
Ejemplo n.º 2
0
        /// <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);
                }
            }
        }
Ejemplo n.º 3
0
        /// <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);
                }
            }
        }