示例#1
0
        private void _ObjectClassProperty_Change(CswNbtNodeProp Prop, bool Creating)
        {
            CswEnumNbtObjectClass OriginalOC = ObjectClassProperty.GetOriginalPropRowValue(CswNbtFieldTypeRuleList.SubFieldName.Text);

            if (false == string.IsNullOrEmpty(OriginalOC) &&
                OriginalOC != CswNbtResources.UnknownEnum &&
                ObjectClassPropertyValue.ObjectClass != CswEnumNbtObjectClass.GenericClass &&
                ObjectClassPropertyValue.ObjectClass != OriginalOC)
            {
                if (OriginalOC == CswEnumNbtObjectClass.GenericClass)
                {
                    // Convert NodeType

                    //NodeType = CheckVersioning( RelationalNodeType );

                    IconFileName.Value.FromString(ObjectClassPropertyValue.IconFileName);

                    // Sync properties with new object class
                    // see case 31678
                    _requiresSync = true;

                    ObjectClassProperty.ServerManaged = true;
                }
                else if (_overrideNodeConversionCheck)
                {
                    _requiresSync = true;
                }
                else
                {
                    throw new CswDniException(CswEnumErrorType.Warning, "Cannot convert this NodeType", "Nodetype " + RelationalNodeType.NodeTypeName + " (" + RelationalNodeType.NodeTypeId + ") cannot be converted because it is not Generic");
                }
            }
        } // _ObjectClassProperty_Change
示例#2
0
        } // runBatchOp()

        #region Private Helper Methods

        #region Helper Methods

        private CswNbtNode _getNodeFromBarcode(string barcode, CswEnumNbtObjectClass objClassType, string barcodePropertyName, bool IncludeDefaultFilters = true)
        {
            CswNbtNode returnNode = null;

            CswNbtView objClassView = new CswNbtView(_CswNbtResources);
            CswNbtMetaDataObjectClass     objClass   = _CswNbtResources.MetaData.getObjectClass(objClassType);
            CswNbtMetaDataObjectClassProp barcodeOCP = objClass.getObjectClassProp(barcodePropertyName);

            CswNbtViewRelationship parent = objClassView.AddViewRelationship(objClass, IncludeDefaultFilters);

            objClassView.AddViewPropertyAndFilter(parent,
                                                  MetaDataProp: barcodeOCP,
                                                  Value: barcode,
                                                  FilterMode: CswEnumNbtFilterMode.Equals);

            ICswNbtTree Tree = _CswNbtResources.Trees.getTreeFromView(objClassView, false, true, true);

            Tree.goToRoot();
            for (int i = 0; i < Tree.getChildNodeCount(); i++)
            {
                Tree.goToNthChild(i);
                returnNode = Tree.getNodeForCurrentPosition();
                Tree.goToParentNode();
            }

            return(returnNode);
        }
示例#3
0
        private Dictionary<string, string> InitNodeTypePermissionOptions()
        {
            // set NodeType Permissions options
            // Could be a performance problem!!!
            Dictionary<string, string> NodeTypeOptions = new Dictionary<string, string>();
            foreach( CswNbtMetaDataNodeType NodeType in _CswNbtResources.MetaData.getNodeTypesLatestVersion() )
            {
                CswEnumNbtObjectClass oc = NodeType.getObjectClass().ObjectClass;
                if( ( oc != CswEnumNbtObjectClass.DesignNodeTypeClass &&
                      oc != CswEnumNbtObjectClass.DesignNodeTypeTabClass &&
                      oc != CswEnumNbtObjectClass.DesignNodeTypePropClass &&
                      oc != CswEnumNbtObjectClass.DesignSequenceClass ) ||
                    _CswNbtResources.Permit.can( CswEnumNbtActionName.Design, this ) )
                {
                    foreach( CswEnumNbtNodeTypePermission Permission in CswEnumNbtNodeTypePermission.Members )
                    {
                        string Key = MakeNodeTypePermissionValue( NodeType.FirstVersionNodeTypeId, Permission );
                        string Value = MakeNodeTypePermissionText( NodeType.NodeTypeName, Permission );
                        NodeTypeOptions.Add( Key, Value );
                    }
                    foreach( CswNbtMetaDataNodeTypeTab Tab in NodeType.getNodeTypeTabs() )
                    {
                        foreach( CswEnumNbtNodeTypeTabPermission Permission in CswEnumNbtNodeTypeTabPermission.Members )
                        {
                            string Key = MakeNodeTypeTabPermissionValue( NodeType.FirstVersionNodeTypeId, Tab.FirstTabVersionId, Permission );
                            string Value = MakeNodeTypeTabPermissionText( NodeType.NodeTypeName, Tab.TabName, Permission );
                            NodeTypeOptions.Add( Key, Value );

                        }
                    } // foreach( CswNbtMetaDataNodeTypeTab Tab in NodeType.NodeTypeTabs )
                }
            } // foreach( CswNbtMetaDataNodeType NodeType in _CswNbtResources.MetaData.NodeTypes )
            return NodeTypeOptions;
        } // InitNodeTypePermissionOptions()
示例#4
0
        private void _addNodeTypeAttributes(CswNbtMetaDataNodeType NodeType, JObject ReturnVal)
        {
            CswEnumNbtObjectClass ObjectClass = NodeType.getObjectClassValue();
            string NtName = "nodetype_" + NodeType.NodeTypeId;

            ReturnVal[NtName]                  = new JObject();
            ReturnVal[NtName]["id"]            = NodeType.NodeTypeId;
            ReturnVal[NtName]["name"]          = NodeType.NodeTypeName;
            ReturnVal[NtName]["iconfilename"]  = CswNbtMetaDataObjectClass.IconPrefix16 + NodeType.IconFileName;
            ReturnVal[NtName]["objectclass"]   = ObjectClass.ToString();
            ReturnVal[NtName]["objectclassid"] = NodeType.ObjectClassId.ToString();

            switch (ObjectClass)
            {
            // This is expensive, and as far as I can tell, not used by anyone
            //case CswEnumNbtObjectClass.InspectionDesignClass:
            //    CswNbtMetaDataNodeTypeProp InspectionTargetNTP = NodeType.getNodeTypePropByObjectClassProp( CswNbtObjClassInspectionDesign.PropertyName.Target );
            //    ReturnVal[NtName]["targetnodetypeid"] = InspectionTargetNTP.FKValue.ToString();
            //    if( InspectionTargetNTP.FKType == CswEnumNbtViewPropIdType.NodeTypePropId.ToString() )
            //    {
            //        ReturnVal[NtName]["targetnodetypeid"] = InspectionTargetNTP.FKValue.ToString();
            //    }
            //    break;
            case CswEnumNbtObjectClass.NonChemicalClass:
            case CswEnumNbtObjectClass.ChemicalClass:
                ReturnVal["action"] = CswEnumNbtActionName.Create_Material;
                break;
            }
        }
示例#5
0
        } // update()

        private CswNbtMetaDataNodeType _createPermissionNT( CswEnumNbtObjectClass PermissionClass, string PermissionNTName )
        {
            CswNbtMetaDataObjectClass PermissionOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( PermissionClass );
            CswNbtMetaDataNodeType PermissionNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( PermissionOC.ObjectClassId, PermissionNTName, "System" );
            PermissionNT.setNameTemplateText(
                CswNbtMetaData.MakeTemplateEntry( CswNbtPropertySetPermission.PropertyName.PermissionGroup ) + "-" +
                CswNbtMetaData.MakeTemplateEntry( CswNbtPropertySetPermission.PropertyName.Role ) + "-" +
                CswNbtMetaData.MakeTemplateEntry( CswNbtPropertySetPermission.PropertyName.WorkUnit ) );
            _setPermissionPropFilters( PermissionNT );
            return PermissionNT;
        }
示例#6
0
 private void _setNTPermissionsForOC( CswEnumNbtObjectClass OCName, CswNbtObjClassRole Role, bool AllowEdit )
 {
     CswNbtMetaDataObjectClass OC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( OCName );
     foreach( CswNbtMetaDataNodeType NT in OC.getNodeTypes() )
     {
         _CswNbtSchemaModTrnsctn.Permit.set( CswEnumNbtNodeTypePermission.View, NT, Role, true );
         _CswNbtSchemaModTrnsctn.Permit.set( CswEnumNbtNodeTypePermission.Edit, NT, Role, AllowEdit );
         _CswNbtSchemaModTrnsctn.Permit.set( CswEnumNbtNodeTypePermission.Create, NT, Role, AllowEdit );
         _CswNbtSchemaModTrnsctn.Permit.set( CswEnumNbtNodeTypePermission.Delete, NT, Role, AllowEdit );
     }
 }
示例#7
0
        // For validating object class casting
        protected static bool _Validate(CswNbtNode Node, CswEnumNbtObjectClass TargetObjectClass)
        {
            if (Node == null)
            {
                throw new CswDniException(CswEnumErrorType.Error, "Invalid node", "CswNbtObjClass._Validate was given a null node as a parameter");
            }

            if (!(Node.getObjectClass().ObjectClass == TargetObjectClass))
            {
                throw (new CswDniException(CswEnumErrorType.Error, "Invalid cast", "Can't cast current object class as " + TargetObjectClass.ToString() + "; Current object class is " + Node.getObjectClass().ObjectClass.ToString()));
            }
            return(true);
        }
示例#8
0
 private CswNbtMetaDataNodeType _createGroupNT( CswEnumNbtObjectClass GroupClass, string GroupNTName, string TargetsGridPropName )
 {
     CswNbtMetaDataObjectClass GroupOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( GroupClass );
     CswNbtMetaDataNodeType GroupNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( GroupOC.ObjectClassId, GroupNTName, "System" );
     GroupNT.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassReportGroup.PropertyName.Name ) );
     CswNbtMetaDataNodeTypeTab TaregetsTab = _CswNbtSchemaModTrnsctn.MetaData.makeNewTab( GroupNT, TargetsGridPropName );
     CswNbtMetaDataNodeTypeProp TargetsNTP = GroupNT.getNodeTypePropByObjectClassProp( TargetsGridPropName );
     TargetsNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TaregetsTab.TabId );
     CswNbtMetaDataNodeTypeTab PermissionsTab = _CswNbtSchemaModTrnsctn.MetaData.makeNewTab( GroupNT, CswNbtObjClassReportGroup.PropertyName.Permissions );
     CswNbtMetaDataNodeTypeProp PermissionsNTP = GroupNT.getNodeTypePropByObjectClassProp( CswNbtObjClassReportGroup.PropertyName.Permissions );
     PermissionsNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, PermissionsTab.TabId );
     return GroupNT;
 }
        public CswNbtSchemaUpdateLayoutMgr(CswNbtSchemaModTrnsctn SchemaModTrnsctn, CswEnumNbtObjectClass ObjectClass, CswEnumNbtLayoutType LayoutType = null)
        {
            if (null == ObjectClass || CswResources.UnknownEnum == ObjectClass)
            {
                throw new CswDniException("Cannot instance a Layout Mgr without an Object Class. Object Class was null.");
            }

            this.LayoutType        = LayoutType;
            this.SchemaModTrnsctn  = SchemaModTrnsctn;
            this.ObjectClass       = this.SchemaModTrnsctn.MetaData.getObjectClass(ObjectClass);
            LatestVersionNodeTypes = this.ObjectClass.getLatestVersionNodeTypes();
            Props = new Collection <LayoutProp>();
        }
示例#10
0
        public CswPrimaryKey _getNodeIdByBarcode(CswEnumNbtObjectClass ObjClass, string Barcode, bool IncludeDefaultFilters)
        {
            CswPrimaryKey Ret        = null;
            ICswNbtTree   tree       = _getTree(ObjClass, Barcode, IncludeDefaultFilters);
            int           childCount = tree.getChildNodeCount();

            if (childCount > 0)
            {
                tree.goToNthChild(0);
                Ret = tree.getNodeIdForCurrentPosition();
            }
            return(Ret);
        }
示例#11
0
        private static void _populate(CswNbtResources NbtResources, CswEnumNbtObjectClass ObjectClass, CswCommaDelimitedString Ret)
        {
            CswNbtMetaDataObjectClass ObjClass = NbtResources.MetaData.getObjectClass(ObjectClass);

            if (null != ObjClass)  //Module permissions might cause this to be null
            {
                foreach (CswNbtMetaDataNodeType NodeType in ObjClass.getNodeTypes())
                {
                    Ret.Add("NT_" + NodeType.NodeTypeId.ToString());
                }

                Ret.Add("OC_" + ObjClass.ObjectClassId);
            }
        }
        } // update()

        private void _makeProp( CswEnumNbtObjectClass ObjClass )
        {
            CswNbtMetaDataObjectClass requestOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( ObjClass );

            CswNbtMetaDataObjectClassProp approvalLvlOCP = requestOC.getObjectClassProp( CswNbtObjClassRequestMaterialCreate.PropertyName.ApprovalLevel );

            if( null == approvalLvlOCP )
            {
                _CswNbtSchemaModTrnsctn.createObjectClassProp( new CswNbtWcfMetaDataModel.ObjectClassProp( requestOC )
                    {
                        PropName = CswNbtObjClassRequestMaterialCreate.PropertyName.ApprovalLevel,
                        FieldType = CswEnumNbtFieldType.List,
                        ListOptions = CswEnumNbtMaterialRequestApprovalLevel.All.ToString()
                    } );
            }
        }
示例#13
0
 private void _addSystemViewPropFilter(CswEnumNbtObjectClass ObjectClass, string PropertyName, object FilterValue, CswEnumNbtFilterMode FilterMode = null, CswEnumNbtFieldType FieldType = null)
 {
     if (ObjectClass != CswNbtResources.UnknownEnum)
     {
         FilterMode = FilterMode ?? CswEnumNbtFilterMode.Contains;
         CswNbtMetaDataObjectClass InstanceOc = _CswNbtResources.MetaData.getObjectClass(ObjectClass);
         if (null != InstanceOc)
         {
             CswNbtMetaDataObjectClassProp InstancePropertyOcp = InstanceOc.getObjectClassProp(PropertyName);
             if (null != InstancePropertyOcp)
             {
                 string FilterValueString = CswConvert.ToString(FilterValue);
                 CswNbtActSystemViews.SystemViewPropFilterDefinition ViewPropertyFilter = _NbtSystemView.makeSystemViewFilter(InstancePropertyOcp, FilterValueString, FilterMode, FieldType: FieldType);
                 _NbtSystemView.addSystemViewFilter(ViewPropertyFilter, InstanceOc);
             }
         }
     }
 } // _addSystemViewPropFilter()
        } // update()


        //From MLM module
        private void _toggleMaterialRequestApprovalLevel( CswEnumNbtObjectClass ObjClass, bool MLMDisabled )
        {
            CswNbtMetaDataObjectClass createMaterialRequestOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( ObjClass );
            foreach( CswNbtMetaDataNodeType createMaterialRequestNT in createMaterialRequestOC.getNodeTypes() )
            {
                CswNbtMetaDataNodeTypeProp approvalLevelNT = createMaterialRequestNT.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestMaterialCreate.PropertyName.ApprovalLevel );
                if( MLMDisabled )
                {
                    approvalLevelNT.removeFromAllLayouts();
                }
                else
                {
                    CswNbtMetaDataNodeTypeTab firstTab = createMaterialRequestNT.getFirstNodeTypeTab();
                    approvalLevelNT.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId: firstTab.TabId );
                    approvalLevelNT.updateLayout( CswEnumNbtLayoutType.Add, true );
                }
            }
        }
示例#15
0
        public ICswNbtTree _getTree(CswEnumNbtObjectClass ObjClass, string Barcode, bool IncludeDefaultFilters)
        {
            ICswNbtTree tree = null;
            CswNbtMetaDataObjectClass     metaDataOC = _CswNbtResources.MetaData.getObjectClass(ObjClass);
            CswNbtMetaDataObjectClassProp barcodeOCP = (CswNbtMetaDataObjectClassProp)metaDataOC.getBarcodeProperty();

            if (null != barcodeOCP)
            {
                CswNbtView             view   = new CswNbtView(_CswNbtResources);
                CswNbtViewRelationship parent = view.AddViewRelationship(metaDataOC, IncludeDefaultFilters);
                view.AddViewPropertyAndFilter(parent,
                                              MetaDataProp: barcodeOCP,
                                              Value: Barcode,
                                              SubFieldName: CswNbtFieldTypeRuleBarCode.SubFieldName.Barcode,
                                              FilterMode: CswEnumNbtFilterMode.Equals
                                              );

                if (ObjClass.Equals(CswEnumNbtObjectClass.ContainerClass))
                {
                    CswNbtMetaDataObjectClassProp disposedOCP = metaDataOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.Disposed);
                    view.AddViewProperty(parent, disposedOCP);

                    CswNbtMetaDataObjectClassProp quantityOCP = metaDataOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.Quantity);
                    view.AddViewProperty(parent, quantityOCP);
                }

                if (ObjClass.Equals(CswEnumNbtObjectClass.LocationClass))
                {
                    CswNbtMetaDataObjectClassProp locationOCP = metaDataOC.getObjectClassProp(CswNbtObjClassLocation.PropertyName.Location);
                    view.AddViewProperty(parent, locationOCP);
                }


                tree = _CswNbtResources.Trees.getTreeFromView(view, true, false, false);
            }
            return(tree);
        }
        /// <summary>
        /// for each method condition and method characteristic attached to this
        /// certDef, this method created a corresponding certDef condition
        /// and certDef characteristic. 
        /// </summary>
        private void _createCertDefSpecsAndCharacteristics()
        {
            
            CswNbtMetaDataObjectClass MethodOC = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.MethodClass );
            CswNbtMetaDataObjectClass MethodConditionOC = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.MethodConditionClass );
            CswNbtMetaDataObjectClass MethodCharacteristicOC = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.MethodCharacteristicClass);
            CswNbtMetaDataObjectClass CertDefConditionOC = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.CertDefConditionClass );
            CswNbtMetaDataObjectClass CertDefCharacteristicOC = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.CertDefCharacteristicLimitClass);

            CswNbtMetaDataNodeType CertDefConditionDefaultNT = CertDefConditionOC.FirstNodeType;
            CswNbtMetaDataNodeType CertDefCharacteristicDefaultNT = CertDefCharacteristicOC.FirstNodeType;

            CswNbtMetaDataObjectClassProp MethodConditionMethodOCP = _CswNbtResources.MetaData.getObjectClassProp(MethodConditionOC.ObjectClassId, 
                                                                                                                  CswNbtObjClassMethodCondition.PropertyName.Method);
            CswNbtMetaDataObjectClassProp MethodCharacteristicMethodOCP = _CswNbtResources.MetaData.getObjectClassProp(MethodCharacteristicOC.ObjectClassId, 
                                                                                                                  CswNbtObjClassMethodCharacteristic.PropertyName.Method);

            //create a view of all methodcondition and methodcharacteristics
            //attached to this method
            CswNbtView MethodConditionAndCharacteristicsView = new CswNbtView( _CswNbtResources );
            MethodConditionAndCharacteristicsView.ViewName = "View of all method characteristics and method conditions attached to a method";

            CswNbtViewRelationship MethodAsRootRelationship = MethodConditionAndCharacteristicsView.AddViewRelationship( MethodOC, false );
            MethodAsRootRelationship.NodeIdsToFilterIn.Add( Method.RelatedNodeId );

            MethodConditionAndCharacteristicsView.AddViewRelationship( MethodAsRootRelationship,
                                                                       CswEnumNbtViewPropOwnerType.Second,
                                                                       MethodConditionMethodOCP,
                                                                       false );
            MethodConditionAndCharacteristicsView.AddViewRelationship( MethodAsRootRelationship,
                                                                       CswEnumNbtViewPropOwnerType.Second,
                                                                       MethodCharacteristicMethodOCP,
                                                                       false );

            ICswNbtTree MethodConditionAndCharacteristicsTree = _CswNbtResources.Trees.getTreeFromView( MethodConditionAndCharacteristicsView, false, true, true, true );
            if( MethodConditionAndCharacteristicsTree.getChildNodeCount() > 0 )
            {
                MethodConditionAndCharacteristicsTree.goToNthChild( 0 );

                for( int i = 0; i < MethodConditionAndCharacteristicsTree.getChildNodeCount(); i++ )
                {
                    MethodConditionAndCharacteristicsTree.goToNthChild( i );
                    CswNbtNode thisNode = MethodConditionAndCharacteristicsTree.getNodeForCurrentPosition();

                    CswEnumNbtObjectClass thisNodeOC = thisNode.getObjectClass().ObjectClass;

                    if( thisNodeOC == CswEnumNbtObjectClass.MethodConditionClass)
                    {
                        if( CertDefConditionDefaultNT != null )
                        {
                        CswNbtObjClassMethodCondition thisMethodCondition = thisNode;
                        CswNbtObjClassCertDefCondition correspondingCertDefCondition = _CswNbtResources.Nodes.makeNodeFromNodeTypeId( CertDefConditionDefaultNT.NodeTypeId );

                        correspondingCertDefCondition.MethodCondition.RelatedNodeId = thisMethodCondition.NodeId;
                        correspondingCertDefCondition.CertDefSpec.RelatedNodeId = this.NodeId;
                        
                        correspondingCertDefCondition.postChanges( false );

                           
                        }

                        else
                        {
                            throw new CswDniException(CswEnumErrorType.Error,
                                                      "A CertDef Condition corresponding to an existing Method Condition could not be created because there is no CertDef Condition NodeType",
                                                      "CertDef Condition NodeType not found, so CertDef Condition cannot be created");
                        }
                    }

                    else if( thisNodeOC == CswEnumNbtObjectClass.MethodCharacteristicClass)
                    {
                        if( CertDefConditionDefaultNT != null )
                        {
                        CswNbtObjClassMethodCharacteristic thisMethodCharacteristic = thisNode;
                        CswNbtObjClassCertDefCharacteristicLimit correspondingCertDefCharacteristic = _CswNbtResources.Nodes.makeNodeFromNodeTypeId( CertDefCharacteristicDefaultNT.NodeTypeId );

                        correspondingCertDefCharacteristic.MethodCharacteristic.RelatedNodeId = thisMethodCharacteristic.NodeId;
                        correspondingCertDefCharacteristic.CertDefSpec.RelatedNodeId = this.NodeId;

                        correspondingCertDefCharacteristic.postChanges( false );

                        }
                        else 
                        {
                            throw new CswDniException(CswEnumErrorType.Error,
                                                      "A CertDef Characteristic Limit corresponding to an existing Method Characteristic Limit could not be created because there is no CertDef Characteristic Limit NodeType",
                                                      "CertDef Characteristic Limit NodeType not found, so CertDef Characteristic Limit cannot be created");
                        }
                    }

                    MethodConditionAndCharacteristicsTree.goToParentNode();

                }
            }
           
        }
示例#17
0
 /// <summary>
 /// Returns whether the user has any permission to any group
 /// </summary>
 /// <param name="PermObjectClass">Limit to one class of permission</param>
 /// <param name="RequireEdit">Limit to Edit permissions</param>
 public bool hasUserPermissions(CswEnumNbtObjectClass PermObjectClass = null, bool RequireEdit = false)
 {
     return(getUserPermissions(PermObjectClass, RequireEdit).Keys.Count > 0);
 }
 public static void createDefaultWildcardPermission( CswNbtResources _CswNbtResources, CswEnumNbtObjectClass PermissionClass, CswPrimaryKey GroupId )
 {
     CswNbtMetaDataObjectClass PermissionOC = _CswNbtResources.MetaData.getObjectClass( PermissionClass );
     CswNbtView PermissionsView = new CswNbtView( _CswNbtResources );
     CswNbtViewRelationship PermissionVR = PermissionsView.AddViewRelationship( PermissionOC, IncludeDefaultFilters: false );
     CswNbtMetaDataObjectClassProp GroupOCP = PermissionOC.getObjectClassProp( PropertyName.PermissionGroup );
     PermissionsView.AddViewPropertyAndFilter( PermissionVR, GroupOCP, Value: GroupId.ToString(), SubFieldName: CswNbtFieldTypeRuleRelationship.SubFieldName.NodeID );
     ICswNbtTree PermissionTree = _CswNbtResources.Trees.getTreeFromView( PermissionsView, false, false, false );
     if( PermissionTree.getChildNodeCount() == 0 )
     {
         CswNbtMetaDataNodeType PermissionNT = PermissionOC.FirstNodeType;
         if( null != PermissionNT )
         {
             _CswNbtResources.Nodes.makeNodeFromNodeTypeId( PermissionNT.NodeTypeId, delegate( CswNbtNode NewNode )
                 {
                     CswNbtPropertySetPermission WildCardPermission = NewNode;
                     WildCardPermission.ApplyToAllRoles.Checked = CswEnumTristate.True;
                     WildCardPermission.ApplyToAllWorkUnits.Checked = CswEnumTristate.True;
                     WildCardPermission.PermissionGroup.RelatedNodeId = GroupId;
                     WildCardPermission.View.Checked = CswEnumTristate.True;
                     WildCardPermission.Edit.Checked = CswEnumTristate.True;
                     WildCardPermission.setWildCardValues();
                 } );
         }
     }
 }
示例#19
0
        public Dictionary <CswPrimaryKey, CswPrimaryKey> getUserPermissions(CswEnumNbtObjectClass PermObjectClass = null, bool RequireEdit = false)
        {
            CswNbtObjClassUser UserNode = _CswNbtResources.Nodes[UserId];

            return(UserNode.getUserPermissions(PermObjectClass, RequireEdit));
        }
示例#20
0
 public Dictionary <CswPrimaryKey, CswPrimaryKey> getUserPermissions(CswEnumNbtObjectClass PermGroupType = null, bool RequireEdit = false)
 {
     return(new Dictionary <CswPrimaryKey, CswPrimaryKey>());
 }
示例#21
0
 public bool hasUserPermissions(CswEnumNbtObjectClass PermObjectClass = null, bool RequireEdit = false)
 {
     return(true);
 }
示例#22
0
        /// <summary>
        /// Returns a dictionary of Permission Groups and Permissions (primary keys only), if any exists for this User
        /// </summary>
        /// <param name="PermObjectClass">Limit to one class of permission</param>
        /// <param name="RequireEdit">Limit to Edit permissions</param>
        public Dictionary <CswPrimaryKey, CswPrimaryKey> getUserPermissions(CswEnumNbtObjectClass PermObjectClass = null, bool RequireEdit = false)
        {
            Dictionary <CswPrimaryKey, CswPrimaryKey> ret;

            // Check the cache for the general case
            if (null == PermObjectClass &&
                false == RequireEdit &&
                null != _UserPermissions &&
                _UserPermissions.Keys.Count > 0)
            {
                ret = _UserPermissions;
            }
            else
            {
                ret = new Dictionary <CswPrimaryKey, CswPrimaryKey>();


                if (CswTools.IsPrimaryKey(CurrentWorkUnitId) && CswTools.IsPrimaryKey(RoleId))
                {
                    CswNbtMetaDataPropertySet PermissionSet = _CswNbtResources.MetaData.getPropertySet(CswEnumNbtPropertySetName.PermissionSet);

                    // This performs better than having it in its own 'with' query in large scale data,
                    // because it avoids a full table scan on jct_nodes_props.
                    string pvalQuery = @"from jct_propertyset_ocprop jpocp
                                                    join object_class_props ocp on ocp.objectclasspropid = jpocp.objectclasspropid
                                                    join nodetype_props ntp on ntp.objectclasspropid = ocp.objectclasspropid
                                                    join jct_nodes_props j on j.nodetypepropid = ntp.nodetypepropid
                                                   where jpocp.propertysetid = :permsetid";

                    string SQLQuery = @"with perms as (select n.nodeid,
                                                              (select j.field1_fk " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :roleocp) userrole,
                                                              (select j.field1_fk " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :workunitocp) userworkunit,
                                                              (select j.field1_fk " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :permgroupocp) userpermgroup,
                                                              (select j.field1 " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :applyallrolesocp) applyallroles,
                                                              (select j.field1 " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :applyallworkunitsocp) applyallworkunits,
                                                              (select j.field1 " + pvalQuery + @" and j.nodeid = n.nodeid and ocp.propname = :editocp) edit
                                                         from nodes n
                                                         join nodetypes nt on n.nodetypeid = nt.nodetypeid
                                                         join object_class oc on nt.objectclassid = oc.objectclassid
                                                        where n.istemp = 0";
                    if (null != PermObjectClass)
                    {
                        CswNbtMetaDataObjectClass PermOC = _CswNbtResources.MetaData.getObjectClass(PermObjectClass);
                        if (null != PermOC)
                        {
                            SQLQuery += @"                and oc.objectclassid = " + PermOC.ObjectClassId;
                        }
                        else
                        {
                            throw new CswDniException(CswEnumErrorType.Error, "Server Configuration Error", "getUserPermissions() filtered to an invalid or disabled object class (" + PermObjectClass + ")");
                        }
                    }
                    else
                    {
                        SQLQuery += @"                    and oc.objectclassid in (select jpsoc.objectclassid 
                                                                                 from jct_propertyset_objectclass jpsoc 
                                                                                where jpsoc.propertysetid = :permsetid)";
                    }
                    SQLQuery += @"                   )
                                       select * 
                                         from perms
                                        where (perms.userrole = :role or perms.userrole is null) 
                                          and (perms.userworkunit = :workunit or perms.userworkunit is null)";
                    if (RequireEdit)
                    {
                        SQLQuery += @"        and perms.edit = '" + CswConvert.ToDbVal((CswEnumTristate)CswEnumTristate.True) + @"' ";
                    }
                    SQLQuery += @"          order by userpermgroup, applyallroles, applyallworkunits";
                    CswArbitrarySelect Query = _CswNbtResources.makeCswArbitrarySelect("getUserPermissions", SQLQuery);

                    Query.addParameter("roleocp", CswNbtPropertySetPermission.PropertyName.Role);
                    Query.addParameter("workunitocp", CswNbtPropertySetPermission.PropertyName.WorkUnit);
                    Query.addParameter("permgroupocp", CswNbtPropertySetPermission.PropertyName.PermissionGroup);
                    Query.addParameter("applyallrolesocp", CswNbtPropertySetPermission.PropertyName.ApplyToAllRoles);
                    Query.addParameter("applyallworkunitsocp", CswNbtPropertySetPermission.PropertyName.ApplyToAllWorkUnits);
                    Query.addParameter("editocp", CswNbtPropertySetPermission.PropertyName.Edit);
                    Query.addParameter("permsetid", PermissionSet.PropertySetId.ToString());
                    Query.addParameter("role", RoleId.PrimaryKey.ToString());
                    Query.addParameter("workunit", CurrentWorkUnitId.PrimaryKey.ToString());

                    DataTable DataTable = Query.getTable();
                    foreach (DataRow Row in DataTable.Rows)
                    {
                        CswPrimaryKey PermGroupPk = new CswPrimaryKey("nodes", CswConvert.ToInt32(Row["userpermgroup"].ToString()));
                        CswPrimaryKey PermPk      = new CswPrimaryKey("nodes", CswConvert.ToInt32(Row["nodeid"]));
                        if (false == ret.ContainsKey(PermGroupPk))
                        {
                            ret.Add(PermGroupPk, PermPk);
                        }
                    }
                } // if( CswTools.IsPrimaryKey( CurrentWorkUnitId ) && CswTools.IsPrimaryKey( RoleId ) )

                // Cache the general case for next time
                if (null == PermObjectClass && false == RequireEdit)
                {
                    _UserPermissions = ret;
                }
            } // if-else( null == PermObjectClass && false == RequireEdit )

            return(ret);
        } // getUserPermissions()
示例#23
0
        public void testMetaData()
        {
            CswEnumNbtObjectClass fakeObjectClassName = CswEnumNbtObjectClass.FakeClass;
            string fakeNodeTypeName = "fake Test";

            // new object class
            _fakeTestOC = _SchemaModTrnsctn.createObjectClass(fakeObjectClassName, "doc.png", AuditLevel: CswEnumAuditLevel.NoAudit);
            Assert.IsNotNull(_fakeTestOC, "fakeTestOC was null");

            // new object class prop
            CswNbtMetaDataObjectClassProp fakeTestNameOCP = _SchemaModTrnsctn.createObjectClassProp(_fakeTestOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName  = "Name",
                FieldType = CswEnumNbtFieldType.Text
            });

            Assert.IsNotNull(fakeTestNameOCP, "fakeTestNameOCP was null");

            // new nodetype
            CswNbtMetaDataNodeType fakeTestNT = _SchemaModTrnsctn.MetaData.makeNewNodeType(new CswNbtWcfMetaDataModel.NodeType(_fakeTestOC)
            {
                NodeTypeName = fakeNodeTypeName,
                Category     = "fake cat"
            });

            Assert.IsNotNull(fakeTestNT, "fakeTestNT was null");
            Assert.IsNotNull(fakeTestNT.DesignNode, "fakeTestNT.DesignNode was null");
            Assert.IsNotNull(fakeTestNT.getNodeTypeProp("Name"), "fakeTestNT.getNodeTypeProp( Name ) was null");
            Assert.IsNotNull(fakeTestNT.getNodeTypeProp("Name").DesignNode, "fakeTestNT.getNodeTypeProp( Name ).DesignNode was null");

            // new nodetype tab
            CswNbtMetaDataNodeTypeTab fakeTabNTT = _SchemaModTrnsctn.MetaData.makeNewTab(fakeTestNT, "faketab");

            Assert.IsNotNull(fakeTabNTT, "fakeTabNTT was null");
            Assert.IsNotNull(fakeTabNTT.DesignNode, "fakeTabNTT.DesignNode was null");

            // new nodetype prop
            CswNbtMetaDataNodeTypeProp fakeTestStatusNTP = _SchemaModTrnsctn.MetaData.makeNewProp(new CswNbtWcfMetaDataModel.NodeTypeProp(fakeTestNT, _SchemaModTrnsctn.MetaData.getFieldType(CswEnumNbtFieldType.List), "Status"));

            Assert.IsNotNull(fakeTestStatusNTP, "fakeTestStatusNTP was null");
            Assert.IsNotNull(fakeTestStatusNTP.DesignNode, "fakeTestStatusNTP.DesignNode was null");

            // another new object class prop
            CswNbtMetaDataObjectClassProp fakeTestNumOCP = _SchemaModTrnsctn.createObjectClassProp(_fakeTestOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName       = "Num",
                FieldType      = CswEnumNbtFieldType.Number,
                NumberMinValue = 10
            });

            Assert.IsNotNull(fakeTestNumOCP, "fakeTestNumOCP was null");

            // makemissingnodetypeprops
            _SchemaModTrnsctn.MetaData.makeMissingNodeTypeProps();
            Assert.IsNotNull(fakeTestNT.getNodeTypeProp("Num"), "fakeTestNT.getNodeTypeProp( Num ) was null");
            Assert.IsNotNull(fakeTestNT.getNodeTypeProp("Num").DesignNode, "fakeTestNT.DesignNode.getNodeTypeProp( Num ).DesignNode was null");

            // ensure both design node and nodetype_prop row are synchronized
            Assert.AreEqual(CswConvert.ToInt32(fakeTestNT.getNodeTypeProp("Num")._DataRow[CswEnumNbtNodeTypePropAttributes.numberminvalue]), 10);
            Assert.AreEqual(CswConvert.ToInt32(fakeTestNT.getNodeTypeProp("Num").DesignNode.AttributeProperty[CswEnumNbtPropertyAttributeName.MinimumValue].AsNumber.Value), 10);
        } // testMetaData()
示例#24
0
        public bool hasUserPermissions(CswEnumNbtObjectClass PermObjectClass = null, bool RequireEdit = false)
        {
            CswNbtObjClassUser UserNode = _CswNbtResources.Nodes[UserId];

            return(UserNode.hasUserPermissions(PermObjectClass, RequireEdit));
        }
示例#25
0
        public NodeSelect.Response getNodes(NodeSelect.Request Request)
        {
            NodeSelect.Response Ret = new NodeSelect.Response();

            Ret.CanAdd        = true;
            Ret.UseSearch     = false;
            Ret.NodeTypeId    = Request.NodeTypeId;
            Ret.ObjectClassId = Request.ObjectClassId;
            Ret.PropertySetId = Request.PropertySetId;

            CswNbtMetaDataObjectClass MetaDataObjectClass = null;
            // case 25956
            Collection <Int32> NodeTypeIds = new Collection <Int32>();

            // If we have a view, use it
            CswNbtView View = _getView(Request);

            if (null != View)
            {
                if (Request.PropertySetId > 0)
                {
                    CswNbtMetaDataPropertySet PropSet = _CswNbtResources.MetaData.getPropertySet(Request.PropertySetId);
                    foreach (CswNbtMetaDataObjectClass OC in PropSet.getObjectClasses())
                    {
                        foreach (CswNbtMetaDataNodeType NT in OC.getNodeTypes())
                        {
                            NodeTypeIds.Add(NT.NodeTypeId);
                        }
                    }
                }
                else
                {
                    // Absent a MetaDataObject ID,
                    // the safest assumption is that we want all nodes of the same Object Class at the lowest level of the View,
                    // using the relationships defined on the View, of course.
                    Dictionary <Int32, Int32> LowestLevelNodeTypes = _getRelationshipSecondType(View);
                    foreach (KeyValuePair <int, int> KeyValuePair in LowestLevelNodeTypes)
                    {
                        NodeTypeIds.Add(KeyValuePair.Key);
                        CswNbtMetaDataNodeType NodeType = _CswNbtResources.MetaData.getNodeType(KeyValuePair.Key);

                        Ret.CanAdd = Ret.CanAdd ||
                                     _CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create,
                                                                         NodeType);
                    }
                    Ret.ObjectClassId   = LowestLevelNodeTypes.FirstOrDefault().Value;
                    MetaDataObjectClass = _CswNbtResources.MetaData.getObjectClass(Ret.ObjectClassId);
                }
            }


            // If we don't have a view, make one
            if (null == View)
            {
                if (Request.NodeTypeId > 0)
                {
                    CswNbtMetaDataNodeType MetaDataNodeType = _CswNbtResources.MetaData.getNodeType(Request.NodeTypeId);
                    if (null != MetaDataNodeType)
                    {
                        MetaDataObjectClass = MetaDataNodeType.getObjectClass();
                        NodeTypeIds.Add(MetaDataNodeType.NodeTypeId);
                        View = new CswNbtView(_CswNbtResources);
                        View.AddViewRelationship(MetaDataNodeType, IncludeDefaultFilters: true);

                        Ret.NodeTypeId = MetaDataNodeType.NodeTypeId;
                        Ret.CanAdd     = _CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create, MetaDataNodeType);
                    }
                }
                else
                {
                    if (Request.ObjectClassId > 0)
                    {
                        MetaDataObjectClass = _CswNbtResources.MetaData.getObjectClass(Request.ObjectClassId);
                    }
                    else if (Request.ObjectClass != CswNbtResources.UnknownEnum)
                    {
                        MetaDataObjectClass = _CswNbtResources.MetaData.getObjectClass(Request.ObjectClass);
                    }

                    if (null != MetaDataObjectClass)
                    {
                        Ret.ObjectClassId = MetaDataObjectClass.ObjectClassId;

                        View = new CswNbtView(_CswNbtResources);
                        CswNbtViewRelationship Relationship = View.AddViewRelationship(MetaDataObjectClass, IncludeDefaultFilters: true);

                        if (false == string.IsNullOrEmpty(Request.RelatedToObjectClass) &&
                            CswTools.IsPrimaryKey(Request.RelatedNodeId))
                        {
                            CswEnumNbtObjectClass RealRelatedObjectClass = Request.RelatedToObjectClass;

                            CswNbtNode RelatedNode = _CswNbtResources.Nodes[Request.RelatedNodeId];
                            if (null != RelatedNode)
                            {
                                if (RelatedNode.ObjClass.ObjectClass.ObjectClass == RealRelatedObjectClass)
                                {
                                    Collection <CswNbtMetaDataObjectClassProp> RelatedProps = new Collection <CswNbtMetaDataObjectClassProp>();
                                    CswNbtMetaDataObjectClass MetaRelatedObjectClass        = _CswNbtResources.MetaData.getObjectClass(RealRelatedObjectClass);
                                    Ret.RelatedObjectClassId = MetaRelatedObjectClass.ObjectClassId;
                                    foreach (CswNbtMetaDataObjectClassProp OcProp in
                                             from _OcProp
                                             in MetaDataObjectClass.getObjectClassProps()
                                             where
                                             _OcProp.getFieldTypeValue() ==
                                             CswEnumNbtFieldType.Relationship &&
                                             //_OcProp.FKType == NbtViewRelatedIdType.ObjectClassId.ToString() &&
                                             //_OcProp.FKValue == MetaRelatedObjectClass.ObjectClassId
                                             _OcProp.FkMatches(MetaRelatedObjectClass)
                                             select _OcProp)
                                    {
                                        RelatedProps.Add(OcProp);
                                    }

                                    if (RelatedProps.Any())
                                    {
                                        foreach (CswNbtMetaDataObjectClassProp RelationshipProp in RelatedProps)
                                        {
                                            View.AddViewPropertyAndFilter(Relationship, RelationshipProp,
                                                                          SubFieldName:
                                                                          CswNbtFieldTypeRuleRelationship.SubFieldName.NodeID,
                                                                          Value:
                                                                          Request.RelatedNodeId.PrimaryKey.ToString());
                                        }
                                    }
                                }
                            }
                        }


                        Ret.CanAdd = MetaDataObjectClass.getLatestVersionNodeTypes()
                                     .Aggregate(false,
                                                (current, NodeType) =>
                                                current ||
                                                _CswNbtResources.Permit.canNodeType(
                                                    CswEnumNbtNodeTypePermission.Create, NodeType));
                    }
                    else
                    {
                        Ret.CanAdd = false;
                    }
                }
            }

            if (null != View)
            {
                Ret.Nodes     = getOptions(View, NodeTypeIds, Ret.ObjectClassId);
                Ret.UseSearch = Ret.UseSearch || Ret.Nodes.Count >= _SearchThreshold;
            }

            return(Ret);
        }