090 intermediate
This commit is contained in:
@@ -120,6 +120,7 @@
|
||||
<cfset this.helper.validateField(arguments, "svcOperationCfsParamId", "integer")/>
|
||||
<!--- Еще возможна ошибка, что мы подадим параметр не от своей операции или сервиса - он останется невидим для всех --->
|
||||
<cfset checkParam(arguments.svcOperationCfsParamId, arguments.paramValue)/>
|
||||
<cfset checkResourceRealmAccess(arguments.instanceOperationUid, arguments.svcOperationCfsParamId, arguments.paramValue)/>
|
||||
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
@@ -212,31 +213,24 @@
|
||||
</cfquery>
|
||||
|
||||
<cfif qSvcOperationCfsParam.is_required GT 0 AND len(arguments.paramValue) EQ 0>
|
||||
<!--- <cfreturn "Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> --->
|
||||
<cfthrow type="invalidParamValue" message="Missing required parameter (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/>
|
||||
<cfelseif len(arguments.paramValue) AND NOT validateDataType(arguments.paramValue,qSvcOperationCfsParam.data_type)>
|
||||
<!--- <cfreturn "Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/> --->
|
||||
<cfthrow type="invalidParamValue" message="Invalid format (#qSvcOperationCfsParam.svc_operation_cfs_param#)"/>
|
||||
</cfif>
|
||||
|
||||
<cfif len(arguments.paramValue) AND listLen(qSvcOperationCfsParam.value_list) GT 0 AND NOT listFind(qSvcOperationCfsParam.value_list, arguments.paramValue)>
|
||||
<!--- <cfreturn "Значение параметра #qSvcOperationCfsParam.svc_operation_cfs_param# отсутствует в списке #qSvcOperationCfsParam.value_list#"/> --->
|
||||
<cfthrow type="invalidParamValue" message="Значение параметра #qSvcOperationCfsParam.svc_operation_cfs_param# отсутствует в списке #qSvcOperationCfsParam.value_list#"/>
|
||||
</cfif>
|
||||
<cfif len(arguments.paramValue) AND qSvcOperationCfsParam.maxlength GT 0 AND len(arguments.paramValue) GT qSvcOperationCfsParam.maxlength>
|
||||
<!--- <cfreturn "Длина #qSvcOperationCfsParam.svc_operation_cfs_param# превышает #qSvcOperationCfsParam.maxlength#"/> --->
|
||||
<cfthrow type="invalidParamValue" message="Длина #qSvcOperationCfsParam.svc_operation_cfs_param# превышает #qSvcOperationCfsParam.maxlength#"/>
|
||||
</cfif>
|
||||
<cfif len(arguments.paramValue) AND qSvcOperationCfsParam.minlength GT 0 AND len(arguments.paramValue) LT qSvcOperationCfsParam.minlength>
|
||||
<!--- <cfreturn "Длина #qSvcOperationCfsParam.svc_operation_cfs_param# меньше #qSvcOperationCfsParam.minlength#"/> ---> <!--- *** попробовать cfparam type="regex" --->
|
||||
<cfthrow type="invalidParamValue" message="Длина #qSvcOperationCfsParam.svc_operation_cfs_param# меньше #qSvcOperationCfsParam.minlength#"/>
|
||||
</cfif>
|
||||
<cfif len(arguments.paramValue) AND len(qSvcOperationCfsParam.regex) AND reFind(qSvcOperationCfsParam.regex,arguments.paramValue) EQ 0>
|
||||
<!--- <cfreturn 'Pattern "#qSvcOperationCfsParam.regex#" does not match "#arguments.paramValue#"'/> --->
|
||||
<cfthrow type="invalidParamValue" message='Parameter "#qSvcOperationCfsParam.svc_operation_cfs_param#" value "#arguments.paramValue#" does not match pattern "#qSvcOperationCfsParam.regex#" '/>
|
||||
</cfif>
|
||||
<cfif isNumeric(arguments.paramValue) AND isNumeric(qSvcOperationCfsParam.maxvalue) AND arguments.paramValue GT qSvcOperationCfsParam.maxvalue>
|
||||
<!--- <cfreturn 'Pattern "#qSvcOperationCfsParam.regex#" does not match "#arguments.paramValue#"'/> --->
|
||||
<cfthrow type="invalidParamValue" message='Parameter "#qSvcOperationCfsParam.svc_operation_cfs_param#" value "#arguments.paramValue#" is greater than "#qSvcOperationCfsParam.maxvalue#" '/>
|
||||
</cfif>
|
||||
<cfif isNumeric(arguments.paramValue) AND isNumeric(qSvcOperationCfsParam.minvalue) AND arguments.paramValue LT qSvcOperationCfsParam.minvalue>
|
||||
@@ -247,9 +241,10 @@
|
||||
|
||||
<!--- ****** Внимание! Этот код сравнивает параметры одноименных операций, но уникальность должна быть и между create-modify и т.п. --->
|
||||
|
||||
|
||||
<cfset checkUniqueness(
|
||||
qSvcOperationCfsParam.svc_operation_cfs_param_id, <!--- *** есть в аргументах, но было так - пока не меняю --->
|
||||
arguments.svcOperationCfsParamId,
|
||||
qSvcOperationCfsParam.svc_operation_cfs_param,
|
||||
arguments.paramValue,
|
||||
qSvcOperationCfsParam.unique_scope,
|
||||
arguments.instanceOperationCfsParamUid
|
||||
@@ -313,12 +308,12 @@
|
||||
</cfif>
|
||||
</cfcase>
|
||||
|
||||
<cfdefaultcase></cfdefaultcase>
|
||||
|
||||
<cfdefaultcase></cfdefaultcase>
|
||||
</cfswitch>
|
||||
|
||||
</cffunction>
|
||||
|
||||
|
||||
<cffunction name="validateDataType" returnType="boolean">
|
||||
<cfargument name="value" type="string"/>
|
||||
<cfargument name="dataType" type="string"/>
|
||||
@@ -356,4 +351,48 @@
|
||||
<!--- --->
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="checkResourceRealmAccess" returnType="void">
|
||||
<!---*** В отличие от других методов, этому небезразлично имя параметра --->
|
||||
<cfargument name="instanceOperationUid" type="giud"/>
|
||||
<cfargument name="svcOperationCfsParamId" type="numeric"/>
|
||||
<cfargument name="paramValue" type="string"/>
|
||||
|
||||
<cfset var local={}/>
|
||||
|
||||
<cfquery name="local.qSvcOperationCfsParam">
|
||||
select sop.svc_operation_cfs_param_id
|
||||
,sop.svc_operation_cfs_param
|
||||
from svc_operation_cfs_param sop
|
||||
where sop.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.svcOperationCfsParamId#"/>
|
||||
</cfquery>
|
||||
<cfif lcase(trim(local.qSvcOperationCfsParam.svc_operation_cfs_param)) NEQ lcase("resourceRealm")>
|
||||
<cfreturn/>
|
||||
</cfif>
|
||||
|
||||
<cfquery name="local.qContract">
|
||||
select c.contract_id
|
||||
from instance_operation io
|
||||
join instance e on (io.instance_uid=e.instance_uid)
|
||||
join specification_item si on (e.specification_item_id=si.specification_item_id)
|
||||
join specification s on (si.specification_id=s.specification_id)
|
||||
join contract c on (s.contract_id=c.contract_id)
|
||||
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid("guid",arguments.instanceOperationUid)#/>
|
||||
</cfquery>
|
||||
|
||||
<cfquery name="local.qCheckResourceRealmAccess">
|
||||
select r.resource_realm_id, r.resource_realm, iop.param, iop.param_value, a.contract_id, a.is_enabled
|
||||
from resource_realm r
|
||||
join resource_realm_access a on (r.resource_realm_id=a.resource_realm_id)
|
||||
where r.resource_realm = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.paramValue#"/>
|
||||
AND (a.contract_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#local.qContract.contract_id# null=#!isValid("integer",local.qContract.contract_id)#/> OR a.contract_id=0)
|
||||
AND a.is_enabled
|
||||
</cfquery>
|
||||
|
||||
<cfif local.qCheckResourceRealmAccess.recordCount EQ 0>
|
||||
<cfthrow message="Resource realm specified in CFS param is not available for the current contract" detail="CFS resource realm #arguments.paramValue# unawailable. Instance operation UID #arguments.instanceOperationUid#. Contract ID #arguments.contractId#"/>
|
||||
</cfif>
|
||||
|
||||
</cffunction>
|
||||
|
||||
|
||||
</cfcomponent>
|
||||
Reference in New Issue
Block a user